在Spring框架进行bean对象依赖注入时,@Autowired利用可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。
@Autowired可标注在成员变量,也可以标注在成员变量的set方法上,以及类得构造函数上。
- Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量:
@Autowired
UserDao userDao;
- Spring会调用setUserDao方法来将UserDao类型的唯一一个bean装配到userDao这个属性。
@Autowired
UserDao setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
- 类似于set方法,标注在构造函数上。
@Autowired
Service(UserDao userDao)
{
this.userDao = userDao;
}
对于标注在成员变量上的方式,通常的做法是标注在单个类型的变量上,Spring框架提供了强大的DI能力能够实现对Collection类型的自动注入。
List类型自动注入
当程序中定义了多个相同类型的bean时,如
public interface Converter {
}
public class BookConverter implements Converter {
}
public class CustomerConverter implements Converter {
}
public class AuthorConverter implements Converter {
}
在需要注入以上3个bean的类中声明
List<Converter> converters;
Spring会自动从容器中取出这三个相同类型的bean装配到List类型的converters中,从而简化了依赖注入的过程。
Map类型自动注入
在需要注入以上3个bean的类中声明
Map<String,Converter> converters;
此时,Spring会自动从容器中取出这三个相同类型的bean以及bean的名称,注入到Map类型的converters中,此时该map得key对应为bean的名称,value则为对应bean对象。
程序中可使用如下方式获取对象bean
converter.get("BookConverter")