DI什么时候不适合使用
When is DI not suitable to use
我正在阅读有关 DI 的博客,其中有些句子我不明白。
什么意思DI在运行时是单例对象只有在spring(with@Component
)扫描范围内的对象才能通过注解使用DI( @Autowired
),而其他new创建的不能通过注解使用DI?
不能使用 DI,因为 Father 可以通过 new 创建。
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);
}
意思是:
Spring负责管理对象的作用域。您不需要像 final 类 这样带有静态 getInstance 方法的样板。 (关于单例在 Spring see this question 中的工作方式。)
Spring 只能将组件自动装配到组件中,前提是这些组件位于指定的位置,组件扫描是 spring 搜索组件的方式它需要接线。您可以通过指定需要从哪些包名称开始搜索来为 spring 提供起点。如果组件不在这些目录之一中,则 Spring 无法管理它。
我正在阅读有关 DI 的博客,其中有些句子我不明白。
什么意思DI在运行时是单例对象只有在spring(with@Component
)扫描范围内的对象才能通过注解使用DI( @Autowired
),而其他new创建的不能通过注解使用DI?
不能使用 DI,因为 Father 可以通过 new 创建。
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);
}
意思是:
Spring负责管理对象的作用域。您不需要像 final 类 这样带有静态 getInstance 方法的样板。 (关于单例在 Spring see this question 中的工作方式。)
Spring 只能将组件自动装配到组件中,前提是这些组件位于指定的位置,组件扫描是 spring 搜索组件的方式它需要接线。您可以通过指定需要从哪些包名称开始搜索来为 spring 提供起点。如果组件不在这些目录之一中,则 Spring 无法管理它。