自動裝配
spring利用依賴注入(DI),完成對IOC容器中各個組件依賴關係的賦值。
@Autowired(Spring獨有的)
- 默認優先按照類型去容器中找對應的組件,也就是 applicationContext.getBean(Person.class);
- 如果找到多個相同類型的組件,再使用屬性名稱作爲組件id去容器中查找也就是 applicationContext.getBean(“person”);
- 但是也可以使用
@Qualifier("person")
指定需要裝配的組件的id,而不是使用屬性名 - 自動裝配默認一定要將屬性賦值好,不然會報錯,但是可以使用
@AutoAutowired
註解中的required
屬性避免報錯 @Primary
,該註解可以讓spring進行自動裝配的時候默認使用首選的bean,也可以繼續使用@Qualifier
指定需要裝配的bean的名字@Autowired
可以標記在方法上,構造器上(組件只有一個有參構造器,可以省略@Autowired
註解)、參數上、這個時候參數都是從容器中獲取參數組件的值。
@Resource(JSR250)、@Inject(JSR330)[Java規範註解]
@Resource
可以實現和@Autowired
相同的註解,但是默認是按照組件名稱來進行裝配的。無法支持@Qualifier
、@Primary
、required
註解。@Inject
需要導入javax.inject包,和@Autowired
註解基本相同,沒有required=fasle
功能
注入spring底層容器
- 自定義的組件如果要使用Spring容器底層的一些組件(
ApplicationContext
、BeanFactory
等等),這個時候自定義組件需要實現xxxAware;在創建對象的時候,會調用接口規定的方法注入相關組件,從而將Spring底層的一些組件注入到自定義的Bean中。xxxAware的功能都是通過xxxAwareProcessor實現。
@Profile
該註解指定組件在哪個環境下才能被住到容器中,如果不做指定,則所有環境都能注入。該註解可以標註到類,方法上。
- 加了環境標示的bean,只有在這個環境被激活時才能註冊到容器中,默認環境爲default
- 寫在配置類上,只有在指定環境的時候,整個配置類纔會生效
- 沒有標註的bean,在任何環境下都會生效
- 修改環境的方法:
通過命令行參數 -Dspring.profiles.active = 環境名稱