gpt4 book ai didi

java - 将 DAO 类声明为 Spring Autowiring 的类成员或方法参数?

转载 作者:行者123 更新时间:2023-12-01 16:52:34 24 4
gpt4 key购买 nike

我是 Spring Autowiring 的初学者,并且见过不同类型的 Autowiring 实现。

有如下所示的 2 种常用方法可以将持久层自动连接到服务层。

将持久层自动连接到服务层的更好方法是什么?

 @Service
public class SomeServiceImpl {

@Autowired
private CustomerDAO customerDAO;


public List<Customer> getAllCustomer() {
return customerDAO.getAllCustomer();
}
}

对比

@Service
public class SomeServiceImpl {

@Autowired
public List<Customer> getAllCustomer(CustomerDAO customerDAO) {
return customerDAO.getAllCustomer();
}
}

最佳答案

以上都不是。尽管固执己见,但您不应该使用字段注入(inject)(请参阅 thisthis )。

除非您自己传递 CustomerDAO,否则第二个方法甚至无法工作。

相反,将字段设为final并使用基于构造函数的注入(inject)。

@Service
public class SomeServiceImpl {

private final CustomerDAO customerDAO;

@Autowired
public SomeServiceImpl(CustomerDAO customerDAO) {
this.customerDAO= customerDAO;
}
}

仍然很容易测试,将 dao 传递给构造函数,无需传递它。不再隐藏任何内容(不再那么神奇),并且您仍然遵守 OO 规则(对象在构造后应处于有效状态)。

您甚至可以在构造函数中放置验证,以检查传入的参数是否不为 null

关于java - 将 DAO 类声明为 Spring Autowiring 的类成员或方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36981358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com