在Spring框架進(jìn)行bean對象依賴注入時,@Autowired利用可以對成員變量、方法和構(gòu)造函數(shù)進(jìn)行標(biāo)注,來完成自動裝配的工作。
@Autowired可標(biāo)注在成員變量,也可以標(biāo)注在成員變量的set方法上,以及類得構(gòu)造函數(shù)上。
- Spring會直接將UserDao類型的唯一一個bean賦值給userDao這個成員變量:
@Autowired
UserDao userDao;
- Spring會調(diào)用setUserDao方法來將UserDao類型的唯一一個bean裝配到userDao這個屬性。
@Autowired
UserDao setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
- 類似于set方法,標(biāo)注在構(gòu)造函數(shù)上。
@Autowired
Service(UserDao userDao)
{
this.userDao = userDao;
}
對于標(biāo)注在成員變量上的方式,通常的做法是標(biāo)注在單個類型的變量上,Spring框架提供了強(qiáng)大的DI能力能夠?qū)崿F(xiàn)對Collection類型的自動注入。
List類型自動注入
當(dāng)程序中定義了多個相同類型的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對應(yīng)為bean的名稱,value則為對應(yīng)bean對象。
程序中可使用如下方式獲取對象bean
converter.get("BookConverter")