初探Spring之动态代理的使用
来源:互联网 发布:淘宝舒口健牙膏 编辑:程序博客网 时间:2024/06/05 10:55
1.介绍
AOP全称是Aspect Oriented Programming 可以理解为面向切面编程,通过预编译的形式和运行动态代理实现程序功能的统一维护的一种技术。
2.实现方式:
预编译:
AspectJ
动态代理:
JDK动态代理 ,Cglib 动态代理
3.主要的功能有:
日志记录,性能统计,安全控制,事务处理,异常处理等等;
4.动态代理
1)jdk动态代理
jdk是面向接口的,所以一定要写一个接口。
代码结构
接口的方法:
public void productBm(); public void productBc(); public void productAd();
实现类
public void productBm() { System.out.println("生产了宝马"); } public void productBc() { System.out.println("生产了奔驰"); } public void productAd() { System.out.println("生产了奥迪"); }
代理类 实现InvocationHandler:
private Object obj; public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("销售前"); //代理的方法注入参数 args Object result=method.invoke(obj, args);method.invoke(obj, args); System.out.println("销售后"); return result; }
测试类:
//创建目标 IcarImpl a=new IcarImpl(); //创建代理 CarProxy cr=new CarProxy(); //设置代理关系 cr.setObj(a); Icar car = (Icar) Proxy.newProxyInstance(a.getClass().getClassLoader(), a.getClass().getInterfaces(), cr); car.productBm();
执行结果: 销售前
生产了宝马
销售后
2)Cglib动态代理
Cglib不是面向接口的 ,所以不用写接口。这个类继承了 MethodInterceptor 。
这次的目标类和上边的一样
代理类:
public class CglibProxy implements MethodInterceptor { @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { System.out.println("销售前"); //方法注入参数 Object result=arg3.invokeSuper(arg0, arg2); System.out.println("销售后"); return result; }}
测试类:
//创建目标 IcarImpl icarImpl = new IcarImpl(); //创建代理 CglibProxy cglibProxy = new CglibProxy(); //设置个中介 将两个联系在一起 Enhancer enhancer=new Enhancer(); enhancer.setSuperclass(icarImpl.getClass()); enhancer.setCallback(cglibProxy); //生成了目标的对象 IcarImpl ic= (IcarImpl) enhancer.create(); //调用方法 ic.productBc();
大家有问题还望多多提出,共同进步!
阅读全文
0 0
- 初探Spring之动态代理的使用
- spring AOP 动态代理初探
- java之动态代理初探
- Spring动态代理使用
- Spring的点点滴滴之动态代理
- Spring的动态代理
- Spring AOP之动态代理
- Spring学习之动态代理
- 学习Spring之动态代理
- java动态代理初探
- Java动态代理初探
- spring的AOP之java的动态代理
- Spring之AOP的实现(JDK动态代理:只能代理接口,不能代理类)
- Spring架构详解之动态代理的实现原理
- Spring之JDK动态代理和cgLib的区别
- Spring设计模式之JDK的动态代理!
- Spring的静态代理和动态代理
- Spring的静态代理和动态代理
- spring的事物
- HDU-2141(二分查找)
- Movielens数据集详细介绍
- OpenCL的多GPU开发(顺便提一下OpenGL的多GPU开发)
- 手撸代码目录
- 初探Spring之动态代理的使用
- 【hdoj 4081】 Qin Shi Huang's National Road System 【次小生成树 应用变形】
- 链表逆置真的那仫简单吗?
- c语言谭浩强课后作业乒乓球选对手问题
- C++学习日记(玩具谜题AC,)
- IDA权威指南阅读笔记1
- mysql使用Navicat 导出和导入数据库
- 稳定排序 HDU
- 51Nod-1554-欧姆诺姆和项链