動態代理:隨用隨加載 1.基於接口的動態代理 使用jdk提供:Proxy 中的newProxyInstance()的方法
* 要求:被代理實現一個類,不然不能使用
* newProxyInstance()方法的參數
* ClassLoader 用於加載代理對象的字節碼,要求和被代理對象使用相同的類加載器 * interfaces, 讓代理對象和被代理對象具備相同的方法
* InvocationHandler 提供加強的代碼
* 有一個invoke方法
* proxy 代理對象的引用
* method 當前執行的方法
* args 當前執行方法所需的參數,和被代理對象有相同的返回值.net
//給出了main方法代理
public static void main(String\[\] args) { final Iproducer iproducer=new Producer(); Iproducer proxy= (Iproducer)Proxy.newProxyInstance(iproducer.getClass().getClassLoader(),
iproducer.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Float money=(Float)args[0];
Object value=null;
//判斷當前方法
if("sale".equals(method.getName()))
value= method.invoke(iproducer,money*0.8f);
return value;
}
});
proxy.sale(1000f);
}code
2.基於子類的動態代理 使用cglib對象
給出main方法 public static void main(final String[] args) {
final Producer producer = new Producer();接口
Producer enhanceProducer= (Producer) Enhancer.create(producer.getClass(), new MethodInterceptor() {
/**ip