spring boot 动态代理选择
时间:2019-03-19
本文章向大家介绍spring boot 动态代理选择,主要包括spring boot 动态代理选择使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 public class DefaultAopProxyFactory implements AopProxyFactory, Serializable { 2 3 @Override 4 public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { 5 if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) { 6 Class<?> targetClass = config.getTargetClass(); 7 if (targetClass == null) { 8 throw new AopConfigException("TargetSource cannot determine target class: " + 9 "Either an interface or a target is required for proxy creation."); 10 } 11 if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) { 12 return new JdkDynamicAopProxy(config); 13 } 14 return new ObjenesisCglibAopProxy(config); 15 } 16 else { 17 return new JdkDynamicAopProxy(config); 18 } 19 } 20 21 /** 22 * Determine whether the supplied {@link AdvisedSupport} has only the 23 * {@link org.springframework.aop.SpringProxy} interface specified 24 * (or no proxy interfaces specified at all). 25 */ 26 private boolean hasNoUserSuppliedProxyInterfaces(AdvisedSupport config) { 27 Class<?>[] ifcs = config.getProxiedInterfaces(); 28 return (ifcs.length == 0 || (ifcs.length == 1 && SpringProxy.class.isAssignableFrom(ifcs[0]))); 29 } 30 31 }
spring 动态代理有jdk和Cglib两种方式,具体选择是在DefaultAopProxyFactory这个类里面进行选择的。
如果AOP使用显式优化,或者配置了目标类,或者只使用Spring支持的代理接口执行第一个分支,否则使用JDK动态代理。第一个分支如果代理类是接口或者可以被JDK动态代理使用JDK动态代理,否则使用CGLIB。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 第八节:Activiti6.0——启动流程相关
- 第九节:Activiti6.0——ReceiveTask接收信号、中间信号捕获事件和中间消息捕获事件的流程推进
- SpringBoot——全局异常捕获和自定义异常
- RTSP协议视频平台EasyNVR接入到EasyNVS管理平台后无法显示RTMP及RTSP视频流地址问题
- SpringBoot——配置logback日志
- Istio 运维实战系列(2):让人头大的『无头服务』-上
- 第十节:Activiti6.0——四种Job工作的产生与管理
- 使用vue3.0,不需要build也可以
- 听说vue项目不用build也能用?
- 使用 Vue 3.0,你可能不再需要Vuex了
- MySQL InnoDB索引:存储结构
- Element 根据描述展示表单
- VUE 插件注册
- 表格中的输入框验证
- 不可忽视的CSS布局