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

Spring?@Configuration?proxyBeanMethods=false問題

 更新時間:2025年04月08日 08:38:44   作者:catoop  
這篇文章主要介紹了Spring?@Configuration?proxyBeanMethods=false問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Spring @Configuration proxyBeanMethods=false

開門見山,本文沒有原理只有結論,要點如下:

1、proxyBeanMethods=true,Full 全模式,如不指定則默認為 true,@Bean 修飾的方法會被代理。

2、proxyBeanMethods=false,Lite 輕量級模式,@Bean 修飾的方法不會被代理。

3、仔細觀察 proxyBeanMethods 這個詞語,顧名思義,是代理方法的(僅指代被 @Bean 注解的方法哦),所以它的作用肯定是跟當前這個 @Configuration 中的 Bean方法有關的。

4、在同一個 @Configuration 配置類中,值為 true 時,某方法直接調用其他的 Bean方法獲取 Bean(方法返回值是Bean對象)時,不會創(chuàng)建新的 Bean,而是會從 Spring 容器中直接提?。ㄈ绻萜髦袥]有則會同放入容器中)。

5、當值為 false 時,與第4點區(qū)別的是 “像調用普通的Java方法一樣,每次都會完整的執(zhí)行方法,然后返回一個全新的對象”,因為 false 的意思就是不要代理我的方法(不代理就沒有前置邏輯就原汁原味方法調用唄)。

6、如果你的同一個 Configuration 配置類中的多個Bean方法之間沒有這樣互相調用的需求,那么建議使用 Lite輕量級模式(設置 proxyBeanMethods=false),以提高 SpringBoot 的啟動速度和性能。

如下代碼示例中

是否設置 proxyBeanMethods = false 決定了 同學你好... 被輸出一次還是兩次。

@Configuration(proxyBeanMethods = false)
public class TestConfig {

    @Bean
    public Student getStudent() {
        System.out.println("同學你好...");
        return new Student();
    }
    
    @Bean
    public Teacher getTeacher() {
        System.out.println("getTeacher() 方法被執(zhí)行...");
        return new Teacher(getStudent());
    }
    
}

實驗驗證@Configuration中proxyBeanMethods = true和proxyBeanMethods = false的區(qū)別

proxyBeanMethods 注釋說明

如果看完英文注釋完全明白什么意思,OK可以直接關閉該頁面了。

因為我看完了一頭霧水,所以才有下面的實驗。

其實注釋文檔寫得很明白,看完本文再看注釋就豁然開朗了。

測試完整代碼

package com.testProxyBeanMethods;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext ctx = SpringApplication.run(TestApplication.class, args);
        while (true) {
            ctx.getBean(HelloConfiguration.class).test();
            Thread.sleep(1000L);
        }
    }
}


@Configuration(proxyBeanMethods = false)
class HelloConfiguration {

    //spring 容器托管的bean
    @Bean("person")
    //Scope可以不用加,默認就是單例
    public Person person() {
        System.out.println("===:make person " + System.currentTimeMillis());
        return new Person();
    }

    /**
     * 測試直接調用person()方法
     */
    public void test() {
        Person p = person();
        System.out.println("+++person hash code:" + System.identityHashCode(p));
        System.out.println("+++person name:" + p.getName());
    }

}


/**
 * 定義一個class
 */
class Person {
    private String name;

    private static int i = 0;

    public Person() {
        name = String.valueOf(++i);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

當 proxyBeanMethods = true , person() 調用后返回的是同一個對象

當 proxyBeanMethods = fase , person() 調用一次生成一個新對象

結果說明

1.proxyBeanMethods=true 時, Spring用cglib 對HelloConfiguration 所有有@Bean的方法進行了增強,就算你直接調用person()方法,因為cglib生成的代理類不會直接執(zhí)行person()里面的new Person() ,他會檢查是否有單例,有直接返回。

2. proxyBeanMethods=false 時,沒有對person()方法增強,那么調用person()方法,就相當于調用了一個普通方法,每次調用都是直接執(zhí)行了new Person() , 獲取的person對象都是new出來的,這個對象與spring容器無關(沒有被spring容器托管), 因為@Bean,所以spring容器里面還有一個托管的person

3. 當我們自己寫框架或者工具的時候,如果某個對象在框架內部可以不是單例的,那么可以proxyBeanMethods=false ,用于優(yōu)化性能和減少不必要的代理開銷

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • JAVA復制數組和重置數組大小操作

    JAVA復制數組和重置數組大小操作

    這篇文章主要介紹了JAVA復制數組和重置數組大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • JavaFx 實現按鈕防抖功能

    JavaFx 實現按鈕防抖功能

    最近Sun公司推出了JavaFX框架,使用它可以利用JavaFX編程語言來開發(fā)富互聯網應用程序(RIA),這篇文章主要介紹了JavaFx 實現按鈕防抖功能,需要的朋友可以參考下
    2022-01-01
  • 解決spring.thymeleaf.cache=false不起作用的問題

    解決spring.thymeleaf.cache=false不起作用的問題

    這篇文章主要介紹了解決spring.thymeleaf.cache=false不起作用的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • MyBatis查詢返回Map示例代碼

    MyBatis查詢返回Map示例代碼

    這篇文章主要給大家介紹了關于MyBatis查詢返回Map的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • IntelliJ IDEA(或者JetBrains PyCharm)中彈出

    IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License

    今天小編就為大家分享一篇關于IntelliJ IDEA(或者JetBrains PyCharm)中彈出"IntelliJ IDEA License Activation"的解決辦法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 解決kafka:org.apache.kafka.common.errors.TimeoutException問題

    解決kafka:org.apache.kafka.common.errors.TimeoutException問題

    這篇文章主要介紹了解決kafka:org.apache.kafka.common.errors.TimeoutException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 基于Java在netty中實現線程和CPU綁定

    基于Java在netty中實現線程和CPU綁定

    這篇文章主要介紹了基于Java在netty中實現線程和CPU綁定,文章圍繞主題的相關內容展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 使用SpringBoot的CommandLineRunner遇到的坑及解決

    使用SpringBoot的CommandLineRunner遇到的坑及解決

    這篇文章主要介紹了使用SpringBoot的CommandLineRunner遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Spring MVC全局異常處理和單元測試_動力節(jié)點Java學院整理

    Spring MVC全局異常處理和單元測試_動力節(jié)點Java學院整理

    本篇文章主要介紹了Spring MVC全局異常處理和單元測試,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java while(scanner.hasNext())無法跳出的解決方案

    Java while(scanner.hasNext())無法跳出的解決方案

    這篇文章主要介紹了Java while(scanner.hasNext())無法跳出的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

银川市| 秭归县| 彰化市| 西畴县| 慈溪市| 东明县| 安丘市| 洪泽县| 友谊县| 高邑县| 达拉特旗| 赣榆县| 五大连池市| 安顺市| 遵义县| 茂名市| 凤阳县| 淮阳县| 航空| 白河县| 沈丘县| 河间市| 耿马| 桑日县| 来宾市| 棋牌| 宣汉县| 大城县| 简阳市| 兴城市| 长武县| 黑龙江省| 长治县| 渝北区| 霍城县| 厦门市| 宜良县| 沾益县| 甘洛县| 佛山市| 汉源县|