Springboot2中新增的注解属性proxyBeanMethods,默认是true;
可以修改外false;例如:
@Configuration(proxyBeanMethods=false)
这个属性大致的意思是:
proxyBeanMethods代表的是,如果是true的话,那么这个配置类就会被代理了,如果是false的话,那么就不会被代理。
实际应用中使用主要是为了性能;因为
当使用代理对象的调用它的方法,会检测容器中是不是有了这样的组件,如果有,则不再新建组件,直接将已经有的组件返回。
如果说没有的话,才会新建组件。这样保证了容器中的组件始终就保持单一性。不过这也有一个不好的地方,那就是每次都要检测,会降低速度。
关于Spring的代理机制描述:
主要概念:
CGLIB:
CGLIB(CodeGenerationLibrary)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB通过继承的方式实现代理;它可以在运行期扩展Java类与实现Java接口
SpringBoot2.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的实例了,如果有了的话,就返回已有对象,没有的话就创建一个,然后放到容器中
上一篇:Jackeylove直播控诉
下一篇:csgo5e是什么意思-5e意思介绍
哈哈哈 子弹越打越多了
.
《刺客信条: 黑旗 记忆重置》回应DLC比本体贵: DLC非必须
当臭猫扶贫神秘嘉豪号主!
原神: 7.0奥黛塔定位反转! 并非木偶专属, 冰神设计成最大悬念
哪辆车能不被28吨钢卷压成废铁? 哪辆车能不被28吨钢卷压成废铁?
原神: 新超导木偶队顶配配装攻略! 告别刮痧与充能卡顿