Spring-DI

weixin_34208283發表於2019-01-09

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介面:

11553600-8940a0373e615ad0.png
spring-aware.png

Spring通過後置處理器BeanPostProcessor,在容器初始化的過程中,對繼承了這些介面的物件注入依賴的物件。