AOP的动态代理技术
-
JDK动态代理技术
- 基于接口的动态代理技术
-
动态代理图示
-
JDK动态代理技术原理
// TargetInterface类 // 动态代理的目标接口 public interface TargetInterface { public void save(); } =================================================== // Target类 public class Target implements TargetInterface{ @Override public void save() { System.out.println("svae...."); } } ================================================== // Advice增强类 public class Advice { // Advice 表示增加类 // 前置增强 public void before(){ System.out.println("before"); } // 后置增强 public void afterRunning(){ System.out.println("after"); } } ================================================== // 重点实现类 /* 在此类中要注意事项 1.使用Proxy.newProxyInstance来创建代理对象,并且使用目标对象的接口来接收 2.在构造中的三个参数 3.第三个匿名对象的参数 */ public void test(){ // 要有目标对象 Target target = new Target(); // 创建增强的类 Advice advice = new Advice(); // 使用JDK的动态代理(使用接口来接收) TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance( target.getClass().getClassLoader(),// 第一个参数为:目标对象的类选择器 target.getClass().getInterfaces(),// 第二个参数为:目标对象相同的接口字节码数组 // 第三个参数为:InvocationHandler匿名对象 new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 这个匿名对象的三个参数为 // proxy:被代理对象 // method:要执行的方法 // args:要传入的参数 // 前置增强(要想有增强的方法,要有增强的类) advice.before(); Object invoke = method.invoke(target, args); advice.afterRunning(); return invoke; } } ); // 调用一下代理对象 proxy.save(); }
-
- 基于接口的动态代理技术
``