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 无法管理它。