spring aop (中下)创建代理
参考
判断代理方式
还是接着上面,AnnotationAwareAspectJAutoProxyCreator.postProcessAfterInitialization->wrapIfNecessary->createProxy内调用了proxyFactory.getProxy(getProxyClassLoader());
(ProxyFactory.getProxy),getProxy内部调用了createAopProxy().getProxy(classLoader);
。也就是说,外界操作的都是getProxy
的返回值,一个代理对象。代理对象的方法调用会被拦截。
所以我们分析createAopProxy(DefaultAopProxyFactory.createAopProxy),它在内部内有判断。
其中的:
if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
return new JdkDynamicAopProxy(config);
}
return new ObjenesisCglibAopProxy(config);
说明,如果被代理的是接口,就用jdk,否则用cglib。也就是说,我们平时在Service实现类上加注解,则会用cglib。而mybatis根据mapper注册的Bean,是以MapperProxy生成的代理类对象,targetClass.isInterface()
判断为假,但Proxy.isProxyClass(targetClass)
判断为真,所以会用jdk。
最终,根据情况创建JdkDynamicAopProxy或ObjenesisCglibAopProxy对象
获取代理对象
在判断代理方式后,会创建JdkDynamicAopProxy或ObjenesisCglibAopProxy对象,并调用getProxy方法,获取代理对象。 ObjenesisCglibAopProxy对象会调用父类CglibAopProxy的getProxy方法。
如此,代理对象已创建。
两种代理对象
两种代理对象JdkDynamicAopProxy和ObjenesisCglibAopProxy,都会拦截外界的方法调用。 做一个合格的程序猿之浅析Spring AOP源码(十五) 分析JdkDynamicAopProxy的invoke方法
- 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 文档注释
- smtplib bcc 密送 失败解决方案
- python sys.stdout
- 【8】进大厂必须掌握的面试题-Java面试-异常和线程
- 魔法引用函数magic_quotes_gpc和magic_quotes_runtime的区别和用法
- 在网页中动态的生成一个gif图片
- 在 Visual Basic .NET 或 JScript 代码中使用早期绑定
- 腾讯云TKE-GPU案例: TensorFlow 在TKE中的使用
- 使用pyppeteer 下载chromium 报错 或速度慢
- layui数据表格自定义每页条数limit设置
- dotnet OpenXML 幻灯片 PPTX 的 Slide Id 和页面序号的关系
- springboot 国际化
- Windows/Android/iOS全平台支持的视频播放器EasyPlayerPro,iOS版播放无音频问题如何解决?
- java之springboot之快速入门(一)- maven方式创建项目
- java之springboot之快速入门-Spring Initializr方式创建项目
- springboot之Web综合开发