JDK的动态代理是基于接口的
package com.open.aop; public interface BusinessInterface { public void processBusiness(); }
目标对象
package com.open.aop; publicclass BusinessObject implements BusinessInterface { publicvoid processBusiness() { System.out.println("action"); } }
代理对象
package com.open.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; publicclass LogHandler implements InvocationHandler { private Object delegate; public Object binder(Object delegate) { this.delegate=delegate; return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(),this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj =null; System.out.println("对象方法调用前"); try{ obj = method.invoke(delegate, args); }catch (Exception e) { } System.out.println("对象方法调用后"); return obj; } }
测试类
package com.open.aop; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; publicclass Test { publicstaticvoid main(String[] args) { BusinessInterface bi = (BusinessInterface) new LogHandler() .binder(new BusinessObject()); bi.processBusiness(); } }
输出结果
对象方法调用前 action 对象方法调用后