Android插件化開(kāi)發(fā)基礎(chǔ)之Java動(dòng)態(tài)代理(proxy)機(jī)制的簡(jiǎn)單例子
一、代碼
package com.sangfor.tree;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface ProxyInterFace {
public void proxyMethod();
}
class TargetObject implements ProxyInterFace {
public void proxyMethod() {
System.out.println("我被代理了,哈哈!");
}
}
class ProxyObject implements InvocationHandler {
//代碼的對(duì)象
public Object targetObject;
public void setTargetObject(Object targetObject) {
this.targetObject = targetObject;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//調(diào)用,傳入一個(gè)目標(biāo)對(duì)象,和對(duì)應(yīng)的對(duì)象參數(shù)
System.out.println("代理前 你可以做的事情");
Object object = method.invoke(targetObject, args);
System.out.println("代理后 你可以做的事情");
return object;
}
}
public class ProxyDemo {
public static void main(String[] args) {
//代理的目標(biāo)對(duì)象
ProxyInterFace target = new TargetObject();
//代理器
ProxyObject proxy = new ProxyObject();
proxy.setTargetObject(target);
//需要傳進(jìn)函數(shù)的handler
InvocationHandler handler = proxy;
//生存新的代理對(duì)象
Object newProxyObject = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
//新的代理對(duì)象執(zhí)行方法
((ProxyInterFace)newProxyObject).proxyMethod();
}
}
二、結(jié)果
代理前 你可以做的事情
我被代理了,哈哈!
代理后 你可以做的事情
作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門(mén)到禿頭 或掃描下面二維碼
零基礎(chǔ)入門(mén)進(jìn)階人工智能(鏈接)