Spring 通过 @Autowired注解来实现bean的自动装配。
@Autowired
TestService testService;
自动装配规则如下:
1.先去容器中寻找TestService类型的bean(此时先不扫描testService字段);
2.若找不到一个bean,抛出异常;
3.若找到一个TestService类型的bean,自动装配,并把bean装配给testService;
4.若TestService类型的bean有多个,则扫描testService字段进行名字匹配,匹配成功则自动装配到testService中;
可以通过指定bean的名称来实现自动装配:
@Autowired
@Qualifier("userJdbcImps")
private UserRepository userRepository;
Spring建议总是使用构造函数建立依赖注入,第一段代码建议写出如下的形式:
private final TestService testService;
@Autowired
public TestController(TestService testService){
this.testService = testService;
}
Spring如此建议是有原因的,参考如下代码片段:
@Autowired
private User user;
private String school;
public UserAccountServiceImpl(){
this.school = user.getSchool();
}
这段代码会报错,因为bean构造方法时会出错,抛出空指针异常;
解决办法时采用Spring建议的构造器注入:
private User user;
private String school;
@Autowired
public UserAccountServiceImpl(User user){
this.user = user;
this.school = user.getSchool();
}
可以看到,使用构造器注入的方法,可以明确成员变量的加载顺序;