Spring 补充@Component 和 注入技巧 问题
@Component 的无参构造和有参构造
如果你使用了 @Component 的 Java Bean 中有无参的构造器,或包括无参构造器在内的多个构造器,那么:
Spring 是使用你的『无参构造器』来创建对象,(此时对象的各个属性还没有值),然后再通过『反射』对各个属性赋值。
如果你的类的构造器『只有有参构造器』,而没有无参的构造器,那么,Spring 会调用你有参的构造器去创建这个对象,并同时完成对其属性的赋值。此后,Spring 不再另外对你的属性赋值。
Spring 官方推荐使用有参构造器创建并初始化对象。如果遇到循环依赖问题,使用前面所说的 @Lazy 解决。
三种注入方式的使用技巧
『基于字段的依赖注入』方式有很多缺点,我们应当避免使用基于字段的依赖注入。
推荐的方法是使用『基于构造函数的依赖注入』方式和『基于 setter 方法的依赖注入』方式。
对于『必需的』依赖项,建议使用基于构造函数的注入,以使它们成为不可变的,并防止它们为 null 。
对于『可选的』依赖项,建议使用基于 Setter 方法的注入。