新余公司做网站,网站界面设计原则,快钱支付需要网站备案吗,网络公司网站案例转载自 Java se之动态代理 jdk动态代理#xff1a; jdk动态代理是 需要提供一个实现了InvocationHandler接口的处理类#xff1b; 通过Proxy的newProxyInstance()方法#xff0c;参数有三个#xff0c;第一个是 类构造器classloader,第二个是目标类实现的接口#xff0c…转载自 Java se之动态代理 jdk动态代理 jdk动态代理是 需要提供一个实现了InvocationHandler接口的处理类 通过Proxy的newProxyInstance()方法参数有三个第一个是 类构造器classloader,第二个是目标类实现的接口这是必须的;第三个就是上面自定义的处理类Handler
局限是必须是目标类实现了接口否则无法用java提供的动态代理但是CGlib进行了补充通过实现目标类的子类来进行代理。
大家在熟悉不过的便是AOP了spring中AOP便是通过 java 动态代理 和 CGlib两种方式实现的。
通过以下例子来简单认识jdk动态代理
public interface Bank {public void save();
}
public class ICBCBank implements Bank {Overridepublic void save() {System.out.println(工商存钱);}}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class MyHandler implements InvocationHandler{private Object target;MyHandler(Object target){this.target target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {before();Object obj method.invoke(target, args);after();return obj;}private void before(){System.out.println(检查钱是否完整无存);}private void after(){System.out.println(如果有错就回滚);}
}
import java.lang.reflect.Proxy;public class ProxyDemo {public static void main(String[] args) {Bank bank new ICBCBank();MyHandler handler new MyHandler(bank);Bank obj (Bank) Proxy.newProxyInstance(bank.getClass().getClassLoader(), bank.getClass().getInterfaces(), handler);obj.save();//System.out.println(obj.getClass().getName());//com.sun.proxy.$Proxy0}
}