上篇文章我们说了静态代理,那么有静态代理自然也就有动态代理咯,这次我们主要说 javaJDK给我提供的 一套动态代理。
老规矩先看代码,
接口类:
public interface Hello { public void say(String name); }
//实现类
public class HelloImpl implements Hello{ @Override public void say(String name) { System.out.println(name); } public static void main(String[] args){ DynamicProxy dynamicProxy = new DynamicProxy(new HelloImpl()); Hello proxy = dynamicProxy.getProxy(); proxy.say("一战成佛"); } }
//动态代理类
public class DynamicProxy implements InvocationHandler{ private Object object; public DynamicProxy(Object object){ this.object = object; } @SuppressWarnings("unchecked") public <T> T getProxy(){ return (T)Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { berofe(); Object invoke = method.invoke(object, args); after(); return invoke; } public void berofe(){ System.out.println("before"); } public void after(){ System.out.println("after"); } }
根据注释 很好理解 动态代理,总结下 java提供的动态代理
优点:
1.被代理类变动,代理不需要变动
2.更加灵活
缺点:
1.依赖接口,必须要有接口 才能代理 被代理对象
万一 需要代理的对象没有接口,那就玩玩拉,所以下一篇 开始说CGLIB 这也是springAop实现动态代理的依赖,等着感受它的强大魅力吧