我知道多次问过类似的问题,但我仍然找不到唯一的真实答案。
public class SimpleMovieLister {
private MovieFinder movieFinder;
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
//getter
}
为什么我们不让MovieFinder易失? Spring上下文是否构成了该死的魔术来建立SimpleMovieLister的安全发布?
还是某些线程可以在movieFinder方法调用上获得NPE?
实际上,这个answer澄清了我正在谈论的问题,但没有说明或证明Spring防止该问题的能力。所以我想知道是否有100%正确的答案。
最佳答案
Spring确保容器初始化完成后,可以从任何线程安全地访问您急切初始化的单例。
如果您有一个原型bean,它由一个线程按需创建,然后发布到其他线程,那么您就可以独自考虑线程安全。