我是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();
  }
}

最佳答案

以上都不是。尽管认为您不应使用字段注入(请参见thisthis)。

除非您将CustomerDAO传递给自己,否则第二个甚至都不起作用。

而是使字段final并使用基于构造函数的注入。

@Service
public class SomeServiceImpl {

    private final CustomerDAO customerDAO;

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


仍然易于测试,将dao传递给构造函数,而无需传递它。不再隐藏任何东西(更少的魔力),并且您仍然遵守OO规则(构造后对象应处于有效状态)。

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

08-04 02:38