最佳定义是哪一种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的原因,除非您在构造函数中设置它们,否则它不会编译

09-05 12:38