前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot2中新增的注解属性proxyBeanMethods

Springboot2中新增的注解属性proxyBeanMethods

原创
作者头像
JQ实验室
发布2023-01-29 13:02:12
5110
发布2023-01-29 13:02:12
举报
文章被收录于专栏:实用技术实用技术

Springboot2中新增的注解属性proxyBeanMethods,默认是true;

可以修改外false; 例如:

@Configuration(proxyBeanMethods = false)

这个属性大致的意思是:

proxyBeanMethods代表的是,如果是true的话,那么这个配置类就会被代理了,如果是false的话,那么就不会被代理。

实际应用中使用主要是为了性能;因为

当使用代理对象的调用它的方法,会检测容器中是不是有了这样的组件,如果有,则不再新建组件,直接将已经有的组件返回。 如果说没有的话,才会新建组件。这样保证了容器中的组件始终就保持单一性。不过这也有一个不好的地方,那就是每次都要检测,会降低速度。

关于Spring的代理机制描述:

  • 主要概念:

CGLIB: CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承的方式实现代理;它可以在运行期扩展Java类与实现Java接口 SpringBoot 2.x开始,为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB。 如果需要替换使用JDK动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。 CGLIB是针对类来实现代理的,它的原理是对指定目标类生成一个子类,并覆盖其中的方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。

  • 主要逻辑:

Spring会扫描所有被注解的bean的信息放到容器中进行管理。 Spring会遍历所有的bean信息, 如果发现其中有标记了@Configuration注解的,会对这个类进行CGLIB代码,生成一个代理的类,并且把这个类设置到BeanDefenition的Class属性中。 当需要拿到这个bean的实例的时候,会从这个class属性中拿到的Class对象进行反射 Spring会先去容器中查看一下是否有这个bean的实例了,如果有了的话,就返回已有对象,没有的话就创建一个,然后放到容器中

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档