aop详解(二)
来源:互联网 发布:库里生涯数据统计 编辑:程序博客网 时间:2024/05/17 22:43
上篇讲了aop的原理以及使用jdk代理实现aop.
但是使用Jdk代理有局限性,就是必须要有借口,代理是绑定在接口的,所以就产生了cglib动态代理机制实现。
1)添加一个类
public class ClientBean { private String name = null; public ClientBean() { } public ClientBean(String name) { this.name = name; } public void addClient() { System.out.println("this is addClient() method!"); } public void deleteClient() { System.out.println("this is deleteClient() method!"); } public void getClient() { System.out.println("this is getClient() method!"); } public void updateClient() { System.out.println("this is updateClient() method!"); } public String getClientName() { return name; } public void setClientName(String name) { this.name = name; } }2)代理类
public class CGLibProxy implements MethodInterceptor{private Object targetObject; //是针对类来实现代理的,它的原理是根据目标类生成它的一个子类,并覆盖其中的方法实现增强,但因为是继承,所以无法代理final修饰的类 public Object createProxyObject(Object targetObject) { this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); //申明增强类的实例 enhancer.setSuperclass(this.targetObject.getClass()); //设置被代理类的字节码,cglib根据被代理类的字节码生成子类 enhancer.setCallback(this); //设置回调函数,即一个方法拦截 //通过create方法返回类的代理 return enhancer.create(); } //methodProxy jdk的java.lang.reflect.method的Method的类的代理类,方便实现被代理类的方法的调用 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { ClientBean clientBean = (ClientBean)targetObject; String userName = clientBean.getClientName(); Object result = null; if(userName != null && !"".equals(userName)) { result = method.invoke(targetObject, args); } System.err.println("After..."); return result; } }
3)测试类
public class ProxyExe {public static void main(String[] args) { /* System.out.println(".............CGLIB Proxy...................."); System.out.println("Proved...................."); */ CGLibProxy cproxy = new CGLibProxy(); ClientBean clientBean = (ClientBean)cproxy.createProxyObject(new ClientBean("Bob Liang")); 首先生成代理类 clientBean.addClient(); 调用方法时,触发Invoke方法 } }
0 0
- aop详解(二)
- Spring AOP详解(二)
- Spring(二)Spring AOP配置详解
- Spring--AOP 详解和使用(二)
- 深入浅出Spring(二) AOP详解
- Spring(二)Spring AOP配置详解
- AOP框架(二)
- AOP入门(二)
- Spring AOP (二)
- Spring AOP (二)
- Spring框架(二)整合Junit4、AOP开发、AOP事务管理详解
- Spring 技术核心 IOC AOP <二> AOP详解
- spring随笔(二) AOP
- spring初学二(AOP)
- Spring IOC AOP (二)
- Spring AOP初探(二)
- Spring AOP 基础(二)
- Spring之AOP(二)
- ecshop 添加自定义动态库项目详解
- Bluedroid 协议栈a2dp音频有波动的处理方法
- TFS强制解除被独占签出的文件
- Javascript函数及作用域说明
- [文件系统]——系统IO
- aop详解(二)
- js基础学习笔记(2014年开始)
- 多线程创建顺序
- MFC 小知识总结四
- ECShop 模板库项目功能详解
- Cracking the coding interview--Q3.5
- 【数位DP】【HDU2089】不要62
- 使用Core Data时如何看到所执行的SQL语句?
- tomcat始终处于starting状态,解决思路