Spring中@Autowired自動裝配總結

自動裝配

spring利用依賴注入(DI),完成對IOC容器中各個組件依賴關係的賦值。

@Autowired(Spring獨有的)

  1. 默認優先按照類型去容器中找對應的組件,也就是 applicationContext.getBean(Person.class);
  2. 如果找到多個相同類型的組件,再使用屬性名稱作爲組件id去容器中查找也就是 applicationContext.getBean(“person”);
  3. 但是也可以使用@Qualifier("person")指定需要裝配的組件的id,而不是使用屬性名
  4. 自動裝配默認一定要將屬性賦值好,不然會報錯,但是可以使用@AutoAutowired註解中的required屬性避免報錯
  5. @Primary,該註解可以讓spring進行自動裝配的時候默認使用首選的bean,也可以繼續使用@Qualifier指定需要裝配的bean的名字
  6. @Autowired可以標記在方法上,構造器上(組件只有一個有參構造器,可以省略@Autowired註解)、參數上、這個時候參數都是從容器中獲取參數組件的值。

@Resource(JSR250)、@Inject(JSR330)[Java規範註解]

  1. @Resource可以實現和@Autowired相同的註解,但是默認是按照組件名稱來進行裝配的。無法支持@Qualifier@Primaryrequired註解。
  2. @Inject需要導入javax.inject包,和 @Autowired註解基本相同,沒有required=fasle功能

注入spring底層容器

  1. 自定義的組件如果要使用Spring容器底層的一些組件(ApplicationContextBeanFactory等等),這個時候自定義組件需要實現xxxAware;在創建對象的時候,會調用接口規定的方法注入相關組件,從而將Spring底層的一些組件注入到自定義的Bean中。xxxAware的功能都是通過xxxAwareProcessor實現。

@Profile

該註解指定組件在哪個環境下才能被住到容器中,如果不做指定,則所有環境都能注入。該註解可以標註到類,方法上。

  1. 加了環境標示的bean,只有在這個環境被激活時才能註冊到容器中,默認環境爲default
  2. 寫在配置類上,只有在指定環境的時候,整個配置類纔會生效
  3. 沒有標註的bean,在任何環境下都會生效
  4. 修改環境的方法:
    通過命令行參數 -Dspring.profiles.active = 環境名稱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章