使用@Autowired注解时,发现IDEA报了一个 warning,拥有强迫症的我怎么受得了这个。
Spring Team recommends “Always use constructor based dependency
injection in your beans. Always use assertions for mandatory dependencies”.
使用alt+enter代码改成这样了
这个两种方式有区别吗?@Autowired 可以对成员变量、方法以及构造方法三种方式操作。原来的写法也没错啊。
为什么要使用构造函数的方式注入参数
看下这个例子
@Autowired
private User user;
private String school;
public UserAccountServiceImpl(){
this.school = user.getSchool();
}
这个是不会执行成功的
改成这样就可以成功了
private User user;
private String school;
@Autowired
public UserAccountServiceImpl(User user){
this.user = user;
this.school = user.getSchool();
}
Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法
使用构造方法注入,可以明确成员变量的加载顺序。
为什么要使用final
spring配置的bean不会发生变化也不需要重复加载。
毕竟这样写代码的人毕竟是少数,这样改增加代码的复杂度,需不需要这样改仁者见仁智者见智。
对于有强迫症的程序员来说,可能改成@Resource注解是一个比较委婉的解决方式吧。
参考: