摘要:以及其中的注解注解從定義來(lái)看注解是用注解的因此或者都能處理注解的類注解的類中可以聲明一個(gè)或多個(gè)注解的方法并且可以由容器幫我們管理方法可以直接調(diào)用同一類中的其他方法來(lái)引用它們這也說(shuō)明這種方式使用的是同一個(gè)注在運(yùn)行時(shí)對(duì)每個(gè)這樣的配置類進(jìn)行子類
@Configuration 以及其中的 @Bean 注解
@Configuration 注解:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { String value() default ""; }
從定義來(lái)看, @Configuration 注解是用 @Component 注解的, 因此
@Configuration 注解的類中可以聲明一個(gè)或多個(gè) @Bean 注解的方法. 并且可以由 Spring 容器幫我們管理.
@Configuration public class AppConfig { @Bean public MyBean myBean() { // instantiate, configure and return bean ... } }
userInfo() 方法可以直接調(diào)用同一類中的其他 @Bean 方法來(lái)引用它們. 這也說(shuō)明這種方式使用的是同一個(gè) bean.
@Configuration public class MyBeanConfig { @Bean public Country country(){ return new Country(); } @Bean public UserInfo userInfo(){ return new UserInfo(country()); } }
注: 在運(yùn)行時(shí)對(duì)每個(gè)這樣的配置類(@Configuration)進(jìn)行CGLIB子類化. 因此 @Configuration 類及其工廠方法不能標(biāo)記為 final 或 private.
@Configuration 標(biāo)記的類必須符合下面的要求:
配置類必須以類的形式提供(不能是工廠方法返回的實(shí)例), 允許通過(guò)生成子類在運(yùn)行時(shí)增強(qiáng) (cglib 動(dòng)態(tài)代理).
配置類不能是 final 類 (沒(méi)法動(dòng)態(tài)代理).
配置類必須是非本地的 (即不能在方法中聲明)
任何嵌套配置類都必須聲明為static。
@Bean 方法可能不會(huì)反過(guò)來(lái)創(chuàng)建進(jìn)一步的配置類 (也就是返回的 bean 如果帶有 @Configuration, 也不會(huì)被特殊處理, 只會(huì)作為普通的 bean).
@Bean Lite Mode@Bean 注解也可以在沒(méi)有使用 @Configuration 注解的類中聲明. 例如, 可以在 @Component 類中聲明, 甚至可以在普通的舊類中聲明. 在這種情況下, @Bean方法將以所謂的“l(fā)ite”模式進(jìn)行處理.
@Component public class Calculator { public int sum(int a, int b) { return a+b; } @Bean public MyBean myBean() { return new MyBean(); } }
與 @Configuration 中的 bean 是相反的, 當(dāng)一個(gè) @Bean 方法在lite模式下調(diào)用另一個(gè) @Bean 方法時(shí), 調(diào)用是標(biāo)準(zhǔn)的Java方法調(diào)用; Spring不會(huì)通過(guò)CGLIB代理攔截調(diào)用.
@Component public class MyBeanConfig { @Bean public Country country(){ return new Country(); } @Bean public UserInfo userInfo(){ return new UserInfo(country()); } }
在lite模式下每執(zhí)行一次 new UserInfo(country()); 都會(huì)創(chuàng)建一個(gè)新的 Country 對(duì)象, 這就是上面所說(shuō)標(biāo)準(zhǔn)的Java方法調(diào)用.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77422.html
摘要:用法先創(chuàng)建個(gè)組件,,,分別在類上加上注解。發(fā)現(xiàn)有一個(gè)屬性源碼注釋這樣說(shuō)的自動(dòng)檢測(cè)使用組件。在的方法中,表示不匹配,代表匹配。這就說(shuō)明使用注冊(cè)組件有種方式。 Spring注解應(yīng)用篇--IOC容器Bean組件注冊(cè) 這是Spring注解專題系類文章,本系類文章適合Spring入門者或者原理入門者,小編會(huì)在本系類文章下進(jìn)行企業(yè)級(jí)應(yīng)用實(shí)戰(zhàn)講解以及spring源碼跟進(jìn)。 環(huán)境準(zhǔn)備 編譯器IDEA...
摘要:裝配提供了三種裝配機(jī)制在中進(jìn)行顯示配置在中進(jìn)行顯示配置隱式的發(fā)現(xiàn)機(jī)制和自動(dòng)裝配機(jī)制。表示該類是一個(gè)組件,將自動(dòng)創(chuàng)建該組件實(shí)例,表示注入組件實(shí)例,和功能類似,和功能類似,但和是規(guī)范中提供的注解。 基本原理 spring的基礎(chǔ)是IOC和DI,其實(shí)IOC和DI是對(duì)同一件事從不同的方面進(jìn)行描述的,兩者在spring中是同一件事務(wù)。 IOC:控制反轉(zhuǎn),在這里就是指創(chuàng)建bean的主動(dòng)權(quán)發(fā)生了轉(zhuǎn)移,...
摘要:關(guān)于依賴注入注入的注解提供的注解不僅僅是對(duì)象,還有在構(gòu)造器上,還能用在屬性的方法上。與之相反,的限定符能夠在所有可選的上進(jìn)行縮小范圍的操作,最終能夠達(dá)到只有一個(gè)滿足所規(guī)定的限制條件。注解是使用限定符的主要方式。 本文首發(fā)于泊浮目的專欄:https://segmentfault.com/blog... Spring致力于提供一種方法管理你的業(yè)務(wù)對(duì)象。在大量Java EE的應(yīng)用中,隨處可...
摘要:因此,引入注解,先看一下配置文件怎么寫注意第行,使用必須告訴一下我要使用注解了,告訴的方式有很多,是一種最簡(jiǎn)單的,會(huì)自動(dòng)掃描路徑下的注解。 什么是注解 傳統(tǒng)的Spring做法是使用.xml文件來(lái)對(duì)bean進(jìn)行注入或者是配置aop、事物,這么做有兩個(gè)缺點(diǎn): 1、如果所有的內(nèi)容都配置在.xml文件中,那么.xml文件將會(huì)十分龐大;如果按需求分開(kāi).xml文件,那么.xml文件又會(huì)非常多。總之...
摘要:高級(jí)裝配條件化的自動(dòng)裝配與歧義性的作用域表達(dá)式語(yǔ)言環(huán)境與可以為不同的環(huán)境提供不同的數(shù)據(jù)庫(kù)配置加密算法等注解可以在類級(jí)別和方法級(jí)別,沒(méi)有指定的始終都會(huì)被創(chuàng)建的方式配置不同環(huán)境所需要的數(shù)據(jù)庫(kù)配置會(huì)搭建一個(gè)嵌入式的數(shù)據(jù)庫(kù)模式定義在測(cè)試數(shù)據(jù)通過(guò)加 高級(jí)裝配 Spring profile 條件化的bean 自動(dòng)裝配與歧義性 bean的作用域 Spring表達(dá)式語(yǔ)言 環(huán)境與profile p...
閱讀 2880·2021-11-11 10:58
閱讀 1934·2021-10-11 10:59
閱讀 3501·2019-08-29 16:23
閱讀 2349·2019-08-29 11:11
閱讀 2797·2019-08-28 17:59
閱讀 3848·2019-08-27 10:56
閱讀 2093·2019-08-23 18:37
閱讀 3123·2019-08-23 16:53