Spring Boot AOP代理
来源:互联网 发布:农业科技网络书屋网站 编辑:程序博客网 时间:2024/06/03 12:47
AOP 代理的两种实现:
- jdk是代理接口,私有方法必然不会存在在接口里,所以就不会被拦截到;
- cglib是子类,private的方法照样不会出现在子类里,也不能被拦截。
Java 动态代理。
具体有如下四步骤:
- 通过实现 InvocationHandler 接口创建自己的调用处理器;
- 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
- 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
- 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
GCLIB代理
cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
- cglib封装了asm,可以在运行期动态生成新的class(子类)。
- cglib用于AOP,jdk中的proxy必须基于接口,cglib却没有这个限制。
原理区别:
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
- 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
- 如果目标对象实现了接口,可以强制使用CGLIB实现AOP
- 如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换
在Spring Boot中我们可以通过配置文件制定代理类型。
#开启对AOP的支持spring.aop.auto=true#设置代理模式 true(cglib) false(java JDK代理)spring.aop.proxy-target-class=true
Spring Boot事务默认是使用的cglib代理,可以通过上面的方式去指定代理模式。
源码:https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases
spring-boot-student-data-jpa-transaction 工程
参考: http://www.cnblogs.com/fenglie/articles/4097759.html
阅读全文
0 0
- Spring Boot AOP代理
- Spring Boot AOP之Java 动态代理
- Spring Boot AOP实例
- spring boot aop
- Spring Boot AOP
- Spring Boot AOP Log
- Spring boot 设置AOP
- 学习Spring boot AOP
- spring boot AOP
- Spring AOP 代理机制
- spring aop代理列子
- Spring Aop xml代理
- Spring AOP代理机制
- Spring Aop 动态代理
- Spring AOP 代理机制
- Spring AOP 代理机制
- Spring Aop代理
- Spring AOP代理模式
- POJ 1741 Tree (男人八题
- 【寒江雪】C++四种类型转换
- Groovy语法之操作符
- treap的合并
- 自己定义的下拉多选的链表匡
- Spring Boot AOP代理
- 从九寨沟地震 看那些年数据中心受到的伤害
- 关于easyui datagrid 中日期显示问题
- el表达式的一些小问题:javax.el.PropertyNotFoundException: Property 'Title' not found on type
- 博客即将开始~
- Spring中@Value的用法
- 2017.8.9 老C的键盘 思考记录
- HDU
- ehcache常用配置及详解