@Autowired报Field injection is not recommended的解决办法
解决办法1
必须依赖用构造方法注入,可变应用用setter注入
解决办法2
为什么会警告
静态变量或静态语句块 –> 实例变量或初始化语句块 –> 构造方法 -> @Autowired 的顺序
@Component
public class UserServiceImpl {
@Autowired
private Person person;
private String company;
public UserServiceImpl(){
this.company = person.getCompany();
}
}
空指针问题
会在this.company = person.getCompany()这里报空指针异常
与容器强耦合问题
UserServiceImpl与容器强耦合,也就是在容器之外用不了
解决方案
@Component
public class UserServiceImpl {
private Person person;
private String company;
public UserServiceImpl(Person person) {
this.person=person;
this.company = person.getCompany();
}
}