黑马程序员_动态代理的三种实现
来源:互联网 发布:淘宝上可信的小样店铺 编辑:程序博客网 时间:2024/06/01 15:22
---------------------- android培训、java培训 、期待与您交流! ----------------------
第一种:
Constructor constructor = clazzProxy.getConstructor(InvocationHandler.class);
Collection proxy = (Collection) constructor.newInstance(new MyInvocationhandler());
//MyInvocationhandler为实现InvocationHandler接口的类作为参数传入
System.out.println(proxy);
第二种:
Collection proxy2 = (Collection) constructor .newInstance(new InvocationHandler() {
public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
return null;
}
});// 这种方式 同第一种类似,只不过是将参数换成实现InvocationHandler接口的子类,而且是内部类
第三种:
final ArrayList target=new ArrayList();
Collection proxy3 = (Collection) Proxy.newProxyInstance(
Collection.class.getClassLoader(),
new Class[] { Collection.class },
new InvocationHandler() {
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
retObj = method.invoke(target, args);return retObj;
}
});proxy3.add("abcd");
System.out.println(proxy3);//这种方法即使用Proxy类中一个静态方法newProxyInstance(ClassLoader loader.class<?>[] interfaces,InvocationHandler h)创建。
注:当执行proxy3.add("abcd");时,代理对象proxy3对应invoke方法中proxy参数;.add方法对应invoke方法中method参数;而"abcd"参数则对应invoke方法中args参数,InvocationHandler接口的执行原理就是如此。
如果把目标对象和在代理类中添加的系统功能封装成对象传入代理类,即面向方面编程:把切面的代码以对象的方式进行封装,传给代理类。
例如:
public static Object getProxy(final Object target, final Advice advice) {
Object proxy3 = Proxy.newProxyInstance(target.getClass() .getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
advice.beforeExecute(method);
Object retVal = method.invoke(target, args);
advice.afterExecute(method);return retVal;
}
});
return proxy3;}
//advice是一个接口,它有两个方法,在它的实现类中实现在代理类中其它系统功能,即把系统功能封装成advice对象,以参数形式传入获得代理类的方法中。
- 黑马程序员_动态代理的三种实现
- 黑马程序员_(15)类加载器的委托机制及动态代理的三种实现
- 黑马程序员_动态代理
- 黑马程序员_动态代理
- 黑马程序员_动态代理
- 黑马程序员_动态代理
- 黑马程序员_ 动态代理
- 黑马程序员_动态代理
- 黑马程序员_动态代理
- 黑马程序员_代理的基本实现
- 黑马程序员_代理,动态代理的经典总结
- 黑马程序员_三种实现委托的方法
- 黑马程序员_动态代理技术
- 黑马程序员_动态代理入门讲解
- 黑马程序员10_动态代理
- 黑马程序员-反射机制_动态代理
- 黑马程序员_Java基础_动态代理
- 黑马程序员_ 利用oc的协议实现代理模式
- 1086. Tree Traversals Again (25)
- 今天被Unity的设置恶心到了...
- oracle 异常
- 1000!有几位数,为什么?
- POJ 2411 Mondriaan's Dream(状压 dp)
- 黑马程序员_动态代理的三种实现
- XML相关技术
- 基于物联网的智能医护系统研究
- 杂乱知识点
- Java多态 向上转型 向下转型
- POJ 题目SPF(求割点,分成的连通块)
- 纷华与壮美
- Unix/linux 编程实践教程 ---------- 服务器-客户端编程
- while(scanf(“%d”, &n)!= EOF)