我是Spring autowire的初学者,并且看到了不同类型的autowire实现。
如下所示,有两种常见的方法可以将持久层自动连接到服务层。
自动将持久层连接到服务层的更好方法是哪种?
@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();
}
}
最佳答案
以上都不是。尽管认为您不应使用字段注入(请参见this和this)。
除非您将CustomerDAO
传递给自己,否则第二个甚至都不起作用。
而是使字段final
并使用基于构造函数的注入。
@Service
public class SomeServiceImpl {
private final CustomerDAO customerDAO;
@Autowired
public SomeServiceImpl(CustomerDAO customerDAO) {
this.customerDAO= customerDAO;
}
}
仍然易于测试,将dao传递给构造函数,而无需传递它。不再隐藏任何东西(更少的魔力),并且您仍然遵守OO规则(构造后对象应处于有效状态)。
您甚至可以在构造函数中放入验证,以检查传入的参数是否不是
null
。