最佳定义是哪一种Bean,为什么?
例如,类型1可以用于单元测试而无需创建上下文。
类型1
public class MovieRecommender {
private final CustomerPreferenceDao customerPreferenceDao;
@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
2型
public class MovieRecommender {
@Autowired
public CustomerPreferenceDao customerPreferenceDao;
// ...
}
最佳答案
我会说第一个。不仅由于您可以轻松对其进行测试,而且由于一项简单的规则
在其构造函数的末尾,对象应具有其实际执行任务所需的一切
(对不起,我不记得我在哪里读到的:(无论如何,我认为遵循这条规则是相当不错的)
因此,通过像第二种方式那样实现类,可以创建没有所需内容的实例。您必须实例化它并设置其依赖性。如果您忘记了最后一部分会怎样?
这就是为什么我总是推荐构造函数注入并将依赖项设置为final
的原因,除非您在构造函数中设置它们,否则它不会编译