栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring @Configuration proxyBeanMethods=false

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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对象)时,不会创建新的 Bean,而是会从 Spring 容器中直接提取(如果容器中没有则会同放入容器中)。

5、当值为 false 时,与第4点区别的是 “像调用普通的Java方法一样,每次都会完整的执行方法,然后返回一个全新的对象”,因为 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() 方法被执行...");
        return new Teacher(getStudent());
    }
    
}

(END)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号