学习写代码呀

导航

@Autowired注解的几种方式 --依赖注入

*@Autowired注入成员变量,利用field反射注入,要等类加载完了才注入bean;@Autowired注入构造方法中,利用构造器注入,有先后依赖关系;setter属性注入,setter代码冗长,不能将属性设置为final。

private A a;

    @Autowired
    public c(A a) {
        this.a= a;
    }

@Autowired
private A a;

1、@autowired写在变量上的注入要等到类完全加载完,才会将相应的bean注入。

写在方法上是为了在构造方法中使用到该变量。写到构造方法中,也就是有了先后的注入依赖关系。

2、第一个是通过构造器注入,  第二个是通过field反射注入
弊端

如果你使用的是构造器注入
恭喜你,当你有十几个甚至更多对象需要注入时,你的构造函数的参数个数可能会长到无法想像。

如果你使用的是field反射注入
如果不使用Spring框架,这个属性只能通过反射注入,太麻烦了!这根本不符合JavaBean规范。
还有,当你不是用过Spring创建的对象时,还可能引起NullPointerException。
并且,你不能用final修饰这个属性。

如果你使用的是setter方法注入
那么你将不能将属性设置为final。

两者取其轻

Spring3.0官方文档建议使用setter注入覆盖构造器注入。
Spring4.0官方文档建议使用构造器注入。

结论

如果注入的属性是必选的属性,则通过构造器注入。
如果注入的属性是可选的属性,则通过setter方法注入。
至于field注入,不建议使用。

3、一般用的是模型驱动,当模型不够时,用属性驱动,属性驱动也就是这个setter注入,一般还是用
@Autowired
private A abc;

    
    public setAbc(A a) {
        this.a= a;
    }
结合模型驱动用。
记住八字真言:“模型不够,属性来凑”。

posted on 2020-10-14 09:48  学习写代码呀  阅读(4154)  评论(0编辑  收藏  举报