当前位置: 首页 > 后端技术 > Java

SpringBoot实例化bean是如何选择代理方法的?

时间:2023-04-01 14:00:30 Java

图1回顾一下前面提到的事务源码分析,执行到AbstractAutowireCapableBeanFactory.initializeBean()->applyBeanPostProcessorsAfterInitialization(wrappedBean,beanName)->AbstractAutoProxyCreator.postProcessAfterInitialization()->AbstractAutoProxyCreator.wrapIfNecessary()->AopFaultoryAopProxy)链来创建代理人;publicAopProxycreateAopProxy(AdvisedSupportconfig)throwsAopConfigException{if(config.isOptimize()||config.isProxyTargetClass()||hasNoUserSuppliedProxyInterfaces(config)){ClasstargetClass=config.getTargetClass();if(targetClass==null){thrownewAopConfigException("TargetSource无法确定目标类:"+"创建代理需要接口或目标。");}//如果是接口if(targetClass.isInterface()||Proxy.isProxyClass(targetClass)){returnnewJdkDynamicAopProxy(配置);}//如果不是接口returnnewObjenesisCglibAopProxy(config);}else{returnnewJdkDynamicAopProxy(config);通过上述方法确定cglib或jdk动态代理;