标签:oca voc style 逻辑 invoke final 调用 dem nts
首先应该明确两个概念
代理对象:对访问目标对象进行拦截的对象
目标对象:实际要访问的对象
代理的作用
可以用对方法的加强;
动态代理demo
//目标对象 public class Target implements Itarget{ @Override public void test1() { System.out.println("目标对象的test1()"); } }
//代理对象 public class ProxyDemo1 { @Test public void test1(){ //创建动态代理对象 final Target tar=new Target();//在匿名内部类被调用,加final修饰 Itarget newProxyInstance = (Itarget) Proxy.newProxyInstance(tar.getClass().getClassLoader(), //传递一个和目标一致的类加载器 tar.getClass().getInterfaces(), //传递一个一个Class<?>[] interfaces new InvocationHandler() {//使用匿名内部类实现接口InvocationHandler @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("调用目标方法前的逻辑"); Object invoke = method.invoke(tar, args); System.out.println("调用目标方法前的逻辑"); return invoke; } } ); newProxyInstance.test1();//实际调用了InvocationHandler下的invoke } }
//执行结果
调用目标方法前的逻辑
目标对象的test1()
调用目标方法前的逻辑
注意:jdk的Proxy方式实现的动态代理目标对象必须有接口,没有接口不能实现jdk
版本的动态代理.
标签:oca voc style 逻辑 invoke final 调用 dem nts
原文地址:https://www.cnblogs.com/steve-guo/p/9425115.html