1掉缺、自動(dòng)裝配:Spring利用依賴(lài)注入(DI)卜录,完成對(duì)IOC容器中更組件的依賴(lài)關(guān)系賦值
2、@Autowired(是spring的注解)
- 自動(dòng)注入眶明,默認(rèn)優(yōu)先按照類(lèi)型去容器中找對(duì)應(yīng)的組件艰毒,找到就賦值
- 如果找到多個(gè)類(lèi)型相同的組件,再將屬性的名稱(chēng)作為組件的id去容器查找
- @Autowired(required = false):表示找不到springIOC中的bean搜囱,也可輸出
3丑瞧、@Qualifier("beanName"):可以直接指定使用的組件id
4柑土、自動(dòng)裝配 默認(rèn) 一定要將屬性賦值好(即一定要將屬性bean注入到springIOC容器中)
5、@Primary:讓spring進(jìn)行自動(dòng)裝配時(shí)绊汹,默認(rèn)使用首選的bean稽屏,也可以使用@Qualifier("beanName")指定確定裝配的bean
6、Spring還支持使用@Resource(JSR250)注解 和 @Inject(JSR330)注解西乖,這兩注解屬于java規(guī)范:
- @Resource:實(shí)現(xiàn)自動(dòng)裝配功能狐榔,默認(rèn)按照組件名稱(chēng)進(jìn)行裝配
- @Inject:
需要導(dǎo)入依賴(lài) @Inject 注入功能和 @Autowired 一樣,卻沒(méi)有require=false 的功能
- 7获雕、AutowiredAnnotationBeanPostProcessor:解析完成自動(dòng)裝配功能的
- 8薄腻、@Autowired 作用范圍:構(gòu)造器,參數(shù)届案,方法被廓,屬性
1、標(biāo)注在方法位置:@Bean標(biāo)注的方法創(chuàng)建對(duì)象時(shí)萝玷,方法參數(shù)的值從容器中獲取(Car已經(jīng)注冊(cè)到容器中)昆婿;默認(rèn)不寫(xiě)@Autowired
/**
* Car已經(jīng)注冊(cè)到容器中
*
**/
@Bean
public Color color(Car car){
return new Color ();
}
2球碉、標(biāo)注在構(gòu)造器:如果組件只有一個(gè)有參構(gòu)造器,這個(gè)有參構(gòu)造器的@Autowired可以省略仓蛆,參數(shù)位置的組件還是從spring容器中獲日龆;
3看疙、標(biāo)注在參數(shù)位置
注意:默認(rèn)加載ioc容器中的組件豆拨,容器啟動(dòng)會(huì)自動(dòng)調(diào)用無(wú)參構(gòu)造器創(chuàng)造對(duì)象,再進(jìn)行初始化賦值操作能庆。
9施禾、@Profile
Spring 提供的可以根據(jù)當(dāng)前環(huán)境,動(dòng)態(tài)的激活和切換一系列bean(組件)的功能
-
例子:數(shù)據(jù)源的切換
獲取.properties配置文件的三種方式
1搁胆、添加屬性弥搞,在屬性上添加@Value("${db.xxx}")
2、在方法的參數(shù)前添加 @Value("${db.xxx}")
3渠旁、實(shí)現(xiàn) EmbeddedValueResolverAware接口攀例,重寫(xiě) setEmbeddedValueResolver()方法,在該方法中獲取值進(jìn)行處理
- @Profile:指定組件在哪個(gè)環(huán)境情況下才能注冊(cè)到容器中顾腊,不指定粤铭,任何環(huán)境均能注冊(cè)組件
加了@Profile 環(huán)境標(biāo)識(shí)的bean,只有環(huán)境被激活才能注冊(cè)到容器中杂靶,默認(rèn)是@Profile("default")
- 如何激活 @Profile
1梆惯、 使用命令行動(dòng)態(tài)參數(shù):-Dspring.profiles.active = test
2酱鸭、代碼激活步驟:
<1>創(chuàng)建一個(gè)applicationContext對(duì)象
<2>設(shè)置需要激活的環(huán)境
<3>注冊(cè)主配置類(lèi)
<4>啟動(dòng)刷新