spring AOP 动态代理模式整理
Posted Keep Moving
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring AOP 动态代理模式整理相关的知识,希望对你有一定的参考价值。
package util; public interface 被代理类接口 { public void queryDataById(String Id); public void insertData(); }
package util; public class 被代理的类 implements 被代理类接口{ @Override public void insertData() { // TODO Auto-generated method stub System.out.println("不管参数.反正插入数据了"); } @Override public void queryDataById(String Id) { System.out.println("通过"+Id+"查出了数据"); } }
package util; public class 被代理的类2 implements 被代理类接口{ @Override public void insertData() { // TODO Auto-generated method stub System.out.println("第二个
类 ,不管参数.反正插入数据了");
}
@Override
public void queryDataById(String Id) {
System.out.println("这是第二个,,通过"+Id+"查出了数据");
}
}
package util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; /** * * 这个不是动态代理类!!!!! * 主要返回代理类对象!!!! * 通过代理类对象调用被代理的对象 * * @author Steve * */ //该类并不是代理类,只是将被代理类的对象传进这个类中,经过处理 返回代理类的对象 public class 动态代理类 { private 被代理类接口 inter = null; //建个构造器,将被代理的对象传进来 public 动态代理类(被代理类接口 inter) { super(); this.inter = inter; } public Object getProxyObject () { //得到classLoader ClassLoader loader = inter.getClass().getClassLoader(); //接口数组 Class[] interfaces = {被代理类接口.class}; //去创建一个能处理该接口的AOP处理器 InvocationHandler h = new 调用处理器(inter); //返回动态代理对象,在运行中,才知道代理哪个接口,调用哪个处理器 return Proxy.newProxyInstance(loader, interfaces, h); } }
package util; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; //特定的处理器 public class 调用处理器 implements InvocationHandler{ //将被代理的对象传进来, 可以调用 private Object target; public 调用处理器(Object target) { this.target = target; } //这个处理器的方法,传进来的几个参数,可以想象成已知的 //proxy 是com.sun.proxy代理对象的引用.调用proxy 中的方法 不管什么方法传进来,通过动态都能使用前置和后置通知了 //代理对象会根据传进来的类,动态的代理这个类 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("我在此处使用前置通知开始执行"+method.getName()+"了.........."); Object result = method.invoke(target, args); System.out.println("我在此处织入后置通知"+method.getName()+"执行完了........"); return result; } }
package util; /** * 采用动态代理的方式实现AOP * @author 胡其阳 * */ public class Aop { public static void main(String[] args) { 被代理类接口 b = new 被代理的类(); 被代理类接口 proxy = (被代理类接口) new 动态代理类(b).getProxyObject(); proxy.queryDataById("1331"); proxy.insertData(); //System.out.println(proxy); } }
以上是关于spring AOP 动态代理模式整理的主要内容,如果未能解决你的问题,请参考以下文章