Jave利用动态代理实现AOP
来源:互联网 发布:开启php的curl扩展 编辑:程序博客网 时间:2024/06/05 01:54
1.JDK Proxy模拟AOP代理对象实例:
package com.skymr.spring.test.aopimpl;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * JDK的代理技术 * @author skymr * */public class JDKProxyFactory implements InvocationHandler{//目标对象,要代理的对象private Object targetObject;/** * 生成代理对象 * @param targetObject * @return */public Object createProxyObject(Object targetObject){this.targetObject = targetObject;//第一个参数:ClassLoader//第二个参数:Interface接口数组,目标对象的接口传入后,代理对象会实现接口//第三个参数:回调参数return Proxy.newProxyInstance(this.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//可进行限拦截,日志记录等return method.invoke(targetObject, args);}}测试:
@org.junit.Testpublic void ownAopTest(){UserInfoDao dao = (UserInfoDao)new JDKProxyFactory().createProxyObject(new UserInfoDaoBean());dao.update();}
2.CGLIB模拟AOP:
package com.skymr.spring.test.aopimpl;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CGlibProxyFactory implements MethodInterceptor{private Object target;public Object createProxyInstance(Object target){this.target = target;Enhancer enhancer = new Enhancer();enhancer.setSuperclass(target.getClass());enhancer.setCallback(this);return enhancer.create();}public Object intercept(Object proxyObject, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {return methodProxy.invoke(target, args);}}
测试
@org.junit.Testpublic void ownAopTest2(){UserInfoDao dao = (UserInfoDao)new CGlibProxyFactory().createProxyInstance(new UserInfoDaoBean());dao.update();}
cglib方式相比jdk proxy方式而言,它可以不用接口
0 0
- Jave利用动态代理实现AOP
- 利用jdk动态代理实现aop
- 【spring框架】利用动态代理实现AOP
- 动态代理实现AOP
- JDK 动态代理 & AOP实现动态代理
- Java动态代理实现AOP
- java动态代理实现aop
- java动态代理实现AOP
- 动态代理方式实现AOP
- JDK动态代理实现AOP
- java动态代理实现AOP
- 动态代理方式实现AOP
- cglib 动态代理实现AOP
- 反射实现AOP动态代理
- 动态代理方式实现AOP
- 动态代理实现Spring Aop
- 实现AOP动态代理原理
- 用动态代理实现AOP
- 第十三周项目1-动物这样叫
- spark基础(二)-----------scala在spark shell里的应用
- 初级算法整理,整数前后换位
- 连载三---探索Objc/Runtime
- 机器学习Matlab实战之垃圾邮件分类————朴素贝叶斯模型
- Jave利用动态代理实现AOP
- hdoj 3549 Flow Problem 【最大流入门 dinic算法】
- 黑马程序员--逻辑运算的优先级和结合性
- LeetCode-TwoSum
- mysql配置文件my.cnf优化实例
- android进程与线程详解一:进程
- 第十三周项目2-形状类族的中的纯虚函数
- MFC的SendMessage函数详解
- Libgdx1.6.2发布,跨平台游戏开发框架