动态代理能够作什么?好比说spring的AOP,它就是以动态代理为基础实现的,AOP拦截须要的请求,而后经过代理把请求的结果返回到AOP代理类中,在代理类里就能够作不少本身想要作的事情,好比日志记录,请求参数记录等
java
首先动态代理须要三个实现类,一个测试类spring
接口HelloInterface
ide
接口实现类HelloInterfaceImpl测试
动态代理类HelloDynamicProxythis
测试类HelloTestspa
代码具体实现代理
HelloInterface日志
/** * Created by liuhj on 2015/12/28. */ public interface HelloInterface { public void say(); }
HelloInterfaceImplcode
/** * Created by liuhj on 2015/12/28. */ public class HelloInterfaceImpl implements HelloInterface { @Override public void say() { System.out.println("Hello"); } }
HelloDynamicProxyorm
要实现InvocationHandler接口
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class HelloDynamicProxy implements InvocationHandler{ private Object target; /** * @param target * @return */ public Object bind(Object target) { this.target = target; return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); } @Override /** * */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; System.out.println("BEGIN"); result=method.invoke(target, args); System.out.println("END"); return result; } }
HelloTest
public class TestProxy { public static void main(String[] args) { HelloDynamicProxy proxy = new HelloDynamicProxy(); HelloInterface helloProxy = (HelloInterface) proxy.bind(new HelloInterfaceImpl()); helloProxy.say(); } }
输出结果
BEGIN Hello END
到此结束了
动态代理和静态代理的区别就是代理中,静态代理是以组合的方式注入到代理类,动态代理则是以反射机制注入到代理类。
才疏学浅,若有错误敬请指出,谢谢。