什么时候DI不适合使用

时间:2019-04-03 15:56:52

标签: java spring dependency-injection spring-annotations

我正在阅读有关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);
 }

1 个答案:

答案 0 :(得分:2)

这意味着:

  • Spring负责管理对象的范围。您不需要像带有静态getInstance方法的最终类那样的样板。 (有关春季see this question中单身人士的工作方式。)

  • Spring只能将事物自动装配到组件中,如果这些组件位于要看的地方,则组件扫描就是spring搜索需要连接的组件的方式。您可以通过指定从其开始搜索所需的软件包名称来为spring提供起点。如果某个组件不在这些目录之一中,那么Spring将无法对其进行管理。