最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關于@Configuration的作用說明

 更新時間:2023年01月01日 12:28:24   作者:qiuz1024  
這篇文章主要介紹了關于@Configuration的作用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、問題描述

在項目中,通常都會配置一個或者多個加了@Configuration注解的配置類,那么@Configuration這個注解到底有神馬作用勒?

@ComponentScan("com")
public class AppConfig {
?? ?@Bean
?? ?public TestDao testDao() {
?? ??? ?return new TestDao();
?? ?}
}
public class Test {
?? ?public static void main(String[] args) {
?? ??? ?AnnotationConfigApplicationContext acc = new AnnotationConfigApplicationContext(AppConfig.class);
?? ?}
}
public class TestDao {
?? ?public TestDao(){
?? ??? ?System.out.println("testDao");
?? ?}

}

執(zhí)行上面的代碼,我們會發(fā)現(xiàn)當我們不加@Configuration這個注解的時候我們的TestDao 這個類還是還是會被實例化,也會打印testDao。我們的spring環(huán)境也可以正常運行。

那么我們的@Configuration注解是來解決什么問題的勒?

我們來看一下下面這段代碼。當我們在AppConfig中有2個方法,而且第二個方法調用了第一個方法。

@ComponentScan("com")
public class AppConfig {

	@Bean
	public TestDao testDao() {
		return new TestDao();
	}

	@Bean
	public TestDao1 testDao1() {
		testDao();
		return new TestDao1();
	}
}
public class TestDao1 {
	public TestDao1(){
		System.out.println("testDao1");
	}
}

不加@Configuration的打印結果

加上@Configuration的打印結果

二、分析

從表面來看,當我們不加@Configuration注解的時候,我們的TestDao會被實例化兩次,這違背了我們spring默認單例的設計原則,當加上我們的@Configuration注解的時候,TestDao只被實例化了一次。

那么其底層到底做了什么,讓我們來深追一下spring源碼吧。

當我們解析beanAppcofig的時候,會給它的一個屬性標識為Full,表明它是一個全注解類。

然后在我們調用ConfigurationClassPostProcessor.postProcessBeanFactory()方法的時候會去判斷我們的bean工廠當中是否有bean需要進行cglib代理。

然后遍歷configBeanDefs這個map

cglib代理主要是對我們的方法進行攔截增強;當我們執(zhí)行AppConfig中的方法的時候會去執(zhí)行cglib代理類中的代理方法,主要就是callBacks中的方法。

isCurrentlyInvokedFactoryMethod(beanMethod)) 

會判斷我們的執(zhí)行方法和我們的調用方法是否是同一個;如果是同一個就調用父類的方法進行new;如果不是就調用$$beanFactory.getBean()獲取。

三、總結

加上@Configuration注解主要是給我們的類加上了cglib代理。

在執(zhí)行我們的配置類的方法時,會執(zhí)行cglib代理類中的方法,其中有一個非常重要的判斷,當我們的執(zhí)行方法和我們的調用方法是同一個方法時,會執(zhí)行父類的方法new(cglib代理基于繼承);當執(zhí)行方法和調用方法不是同一個方法時會調用beanFactory.getBean獲取。

相關文章

  • Java安全之Mojarra?JSF反序列化講解

    Java安全之Mojarra?JSF反序列化講解

    JSF?和類似的?Web?技術之間的區(qū)別在于?JSF?使用?ViewStates(除了會話)來存儲視圖的當前狀態(tài)(例如,當前應該顯示視圖的哪些部分),這篇文章主要介紹了Java安全之Mojarra?JSF反序列化知識講解,包括漏洞復現(xiàn)和漏洞分析,需要的朋友可以參考下
    2022-11-11
  • mybatis?mapper.xml中如何根據(jù)數(shù)據(jù)庫類型選擇對應SQL語句

    mybatis?mapper.xml中如何根據(jù)數(shù)據(jù)庫類型選擇對應SQL語句

    這篇文章主要介紹了mybatis?mapper.xml中如何根據(jù)數(shù)據(jù)庫類型選擇對應SQL語句,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • clickhouse?批量插入數(shù)據(jù)及ClickHouse常用命令詳解

    clickhouse?批量插入數(shù)據(jù)及ClickHouse常用命令詳解

    這篇文章主要介紹了clickhouse?批量插入數(shù)據(jù)及ClickHouse常用命令,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • logback的LevelFilter日志過濾器源碼解讀

    logback的LevelFilter日志過濾器源碼解讀

    這篇文章主要為大家介紹了logback的LevelFilter日志過濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結果代碼解析

    Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結果代碼解析

    本文通過代碼給大家講解了JAVA中Integer.valueOf, parsetInt() String.valueOf的區(qū)別和結果,需要的朋友可以參考下
    2018-05-05
  • Java縮小文件內存占用的方法技巧分享

    Java縮小文件內存占用的方法技巧分享

    在Java應用程序中,處理大文件時經常會遇到內存占用過高的問題,為了縮小文件的內存占用,我們可以采取一些有效的方法來優(yōu)化和管理內存的使用,本文將介紹一些在Java中縮小文件內存占用的技巧,需要的朋友可以參考下
    2024-10-10
  • mybatis?plus樂觀鎖及實現(xiàn)詳解

    mybatis?plus樂觀鎖及實現(xiàn)詳解

    這篇文章主要為大家介紹了mybatis?plus樂觀鎖及實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java 堆排序實例(大頂堆、小頂堆)

    Java 堆排序實例(大頂堆、小頂堆)

    下面小編就為大家分享一篇Java 堆排序實例(大頂堆、小頂堆),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • shuffle的關鍵階段sort(Map端和Reduce端)源碼分析

    shuffle的關鍵階段sort(Map端和Reduce端)源碼分析

    今天小編就為大家分享一篇關于shuffle的關鍵階段sort(Map端和Reduce端)源碼分析,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java枚舉的七種常見用法總結(必看)

    Java枚舉的七種常見用法總結(必看)

    下面小編就為大家?guī)硪黄狫ava枚舉的七種常見用法總結(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11

最新評論

于田县| 高阳县| 鄯善县| 定西市| 伊宁市| 江油市| SHOW| 垫江县| 庐江县| 互助| 岳阳市| 石城县| 若尔盖县| 松阳县| 衢州市| 民丰县| 峨边| 富锦市| 呼玛县| 中超| 综艺| 麻栗坡县| 平安县| 中山市| 肇东市| 苗栗市| 西林县| 富裕县| 县级市| 惠东县| 巴彦县| 常宁市| 沙雅县| 项城市| 凤山市| 建湖县| 灵川县| 九龙县| 维西| 宁陵县| 平南县|