初识spring(九)
来源:互联网 发布:诸神黄昏进阶数据 编辑:程序博客网 时间:2024/06/04 18:04
spring代理之cglib代理
当代理类不需要implements接口时,我们就使用cglib代理。实现了一个接口时我们就使用jdk代理。
UserDao.java
package cn.itcast.c_cglib;/** * 目标对象 * @author Jie.Yuan * */public class UserDao { public void save() { System.out.println("-----已经保存数据!!!------"); }}
ProxyFactory.java
package cn.itcast.c_cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;/** * Cglib子类代理工厂 * (对UserDao 在内存中动态构建一个子类对象) * @author Jie.Yuan * */public class ProxyFactory implements MethodInterceptor{ // 维护目标对象 private Object target; public ProxyFactory(Object target){ this.target = target; } // 给目标对象创建代理对象 public Object getProxyInstance(){ //1. 工具类 Enhancer en = new Enhancer(); //2. 设置父类 en.setSuperclass(target.getClass()); //3. 设置回调函数 en.setCallback(this); //4. 创建子类(代理对象) return en.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("开始事务....."); // 执行目标对象的方法 Object returnValue = method.invoke(target, args); System.out.println("提交事务....."); return returnValue; }}
编写测试类。
App.java
package cn.itcast.c_cglib;public class App { public static void main(String[] args) { // 目标对象 UserDao target = new UserDao(); // class cn.itcast.c_cglib.UserDao System.out.println(target.getClass()); // 代理对象 UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance(); // UserDao子类:class cn.itcast.c_cglib.UserDao$$EnhancerByCGLIB$$25d4aeab System.out.println(proxy.getClass()); // 执行代理对象的方法 proxy.save(); }}
运行结果:
class cn.itcast.c_cglib.UserDao
class cn.itcast.c_cglib.UserDaoe0da0a2bEnhancerByCGLIB
开始事务…..
—–已经保存数据!!!——
提交事务…..
0 0
- 初识spring(九)
- Spring初识(一)
- Spring Security(初识)
- 初识Spring(二)
- 初识spring(五)
- 初识spring(六)
- 初识spring(十一)
- 初识spring(十)
- 初识Spring(一)
- 初识Spring(一)
- 机器学习(九)初识BP神经网络
- 机器学习(九)初识BP神经网络
- (九)spring JDBC
- 初识Spring框架(一)
- 初识Spring框架(二)
- Spring学习笔记(1)---------初识Spring
- Spring系列(一):初识Spring
- Spring学习(1)------初识Spring
- 区别观察者模式
- VS编译选项中的MT,MTD,MD,MDD
- Linux命令 --- 登入登出篇
- 292. Nim Game*
- Android Studio 优秀插件
- 初识spring(九)
- 提高Android Studio/Gradle编译速度的配置
- JMeter之分布式部署
- SDUT 2804 求二叉树的深度
- dos批处理文件的编写
- Hdu oj 1556 Color the ball(树状数组区间更新转单点更新)
- 如何学好web安全
- vim两个文件之间内容复制粘贴
- Java 爬虫实战100例(草稿)