我正在阅读有关DI的博客,有些句子我不理解。
这是什么意思,DI在运行时是一个单例对象,只有在spring扫描范围内(带有@Component
)的那些对象才能通过注解(@Autowired
)使用DI,而新创建的其他人不能通过注释使用DI吗?
不能使用DI,因为父亲可以由新创建。
public class Father{
private SonRepository sonRepo;
private Son getSon(){return sonRepo.getByFatherId(this.id);}
public Father(SonRepository sonRepo){this.sonRepo = sonRepo;}
}
可以使用DI,因为FatherFactory是系统生成的单例对象。
@Component
public class FatherFactory{
private SonRepository sonRepo;
@Autowired
public FatherFactory(SonRepository sonRepo){}
public Father createFather(){
return new Father(sonRepo);
}
答案 0 :(得分:2)
这意味着:
Spring负责管理对象的范围。您不需要像带有静态getInstance方法的最终类那样的样板。 (有关春季see this question中单身人士的工作方式。)
Spring只能将事物自动装配到组件中,如果这些组件位于要看的地方,则组件扫描就是spring搜索需要连接的组件的方式。您可以通过指定从其开始搜索所需的软件包名称来为spring提供起点。如果某个组件不在这些目录之一中,那么Spring将无法对其进行管理。