接口类
public interface CodeTask {
void TaskOne();
String TaskTwo();
}
实现接口类
public class CodeTaskImpl implements CodeTask {
@Override
public void TaskOne() {
System.out.println("task2 one");
}
@Override
public String TaskTwo() {
System.out.println("task2 two");
return "task two";
}
}
实现Invocationhandler类
public class FactoryInvocationHandler implements InvocationHandler {
private Object object;
public FactoryInvocationHandler(Object ob) {
object = ob;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("-----begin------>>");
Object result = method.invoke(object, args);
System.out.println("-----end------>>");
return result;
}
}
main方法中实现
public static void main(String args[]) {
CodeTaskImpl cti = new CodeTaskImpl();
FactoryInvocationHandler ivHandler = new FactoryInvocationHandler(cti);
/**
* newProxyInstance中的三个参数
* classloader:传入类加载器
* interface:传入实现的接口
* 指定newProxyInstance()方法返回的对象要实现哪些接口,可以指定多个接口,
* 例如上面例子只我们只指定了一个接口:Class[] cs = {CodeTask.class};
* h:传入实现InvocationHandler的类
*/
CodeTask codeTask = (CodeTask) Proxy.newProxyInstance(cti.getClass().getClassLoader(),
cti.getClass().getInterfaces(), ivHandler);
codeTask.TaskOne();
codeTask.TaskTwo();
}
使用场景的话,在安卓中可以针对一个Activity实现的接口,比如说View.OnClickListener,进行动态代理,在当前Activity所有的点击的时候进行onClick的方法回调的增强处理。