Spring-DI
Spring利用依賴注入(DI),完成對IOC容器中中各個物件的依賴關係賦值;
具體注入規則如下:
- 預設優先按照型別去容器中找對應的物件;
applicationContext.getBean(UserDao.class);
- 如果找到多個相同型別的元件,再將屬性的名稱作為元件的id去容器中查詢;
applicationContext.getBean("userDao")
- 使用
@Qualifier
可以指定需要裝配的元件的id,而不是使用屬性名;
@Qualifier("bookDao")
- 自動裝配預設一定要將屬性賦值好,沒有就會報錯,如果不需要賦值可以使用
required
屬性;
@Autowired(required=false)
- 使用
@Primary
讓Spring進行自動裝配的時候,預設使用首選的bean;
@Primary
只需要使用註解,標註該物件需要由容器依賴注入,Spring容器就會完成相關依賴物件的建立及賦值的操作。
UserService{
@Autowired
UserDao userDao;
}
Spring支援三種型別的註解:
- Spring規範的
Autowired
- JSR250規範的
Resource
預設是按照元件名稱進行裝配的;
沒有能支援@Primary功能;
沒有支援@Autowired(reqiured=false); - JSR330規範的
Inject
需要匯入javax.inject的包;
沒有required=false的功能;
備註
可以通過繼承Spring的Aware介面,為物件注入Spring容器上下文中的物件,Spring提供了以下的Aware介面:
Spring通過後置處理器
BeanPostProcessor
,在容器初始化的過程中,對繼承了這些介面的物件注入依賴的物件。