在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")