Spring依赖注入
依赖注入(Dependency Injection)的意思就是对象通过构造器函数参数,工厂方法的参数,或者成员属性,定义了对象的依赖对象;容器在创建该对象时会负责注入这些依赖。这个过程是控制反转的,即不是由即将创建的对象来管理自己的依赖的发现和实例化,而是有Spring容器来实现。
在Spring中依赖注入有两种形式, 第一种就是基于构造函数的注入 ,即通过调用构造函数,传入参数,也就是依赖来完成整个依赖注入流程; 第二种就是基于setter方法的注入 。
构造函数的参数的匹配,要避免歧义,如指定类型,指定参数的次序等。如果是按照参数名字匹配,则必须开启debug模式进行编译,否则参数名字是不保留的。如果不想开启debug模式编译,则可以使用 @ConstructorProperties注解 。
setter方法注入是先调用没有参数的默认构造函数构建对象,或者没有参数的静态工厂方法,实例化bean后,调用setter方法来将该对象注入。
通过使用依赖注入,可以使代码更简洁,更好地实现对象之间解耦。另外,通过依赖注入管理的的对象是POJO类,可以更好地进行测试。
如何选择合适的依赖注入方法?
最佳实践是通过构造器方法注入主要依赖对象,通过 setter方法 注入可选的依赖对象。虽然可以在 setter方法 上加上 @Required 注解来实现主要依赖对象注入,但一般还是推荐使用构造器注入必须的依赖。