黑马程序员技术交流社区
标题:
如何实现动态代理?
[打印本页]
作者:
崔洪全
时间:
2013-1-15 13:47
标题:
如何实现动态代理?
动态代理的基本定义,如何实现动态代理?简单说说就可以,用代码写我是会的,只不过对于概念性的东西我却蒙住了。
作者:
张敬培
时间:
2013-1-15 14:29
标题:
RE: 如何实现动态代理?
动态代理最简单的理解就是代理的类型可以随时定义,
public static Object getProxy(final Object target, final Adrice adrice){
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
adrice.before();
Object objVal = method.invoke(target, args);
adrice.after();
return objVal;
}
});
return proxy;
}
复制代码
例如:target传递一个TreeMap,那么代理类就创建了一个Map类型的代理类;如果传递ArrayList,那么创建的就是一个Collection类型的代理类。
这样就提高了这段代码的重用率。
作者:
23559768
时间:
2013-1-15 16:23
动态代理的绑定一个要代理的对象· 就是面向接口编程· 好好看一下 多态吧·
作者:
谢洋
时间:
2013-1-30 13:45
标题:
RE:我的理解是样的,不知有没有问题
/**
* 动态代理
* 实现步骤:
* 1,建立目标类对象:作为主要执行内容;如:ArrayList garget= new ArrayList();
* 2,建立通告对象: 作为运行目标时需添加的功能 ;如: Advice advice = new Advice();
* 3,定义一个获得某目标类的代理的方法:
* private static Object getProxy(final Object target,final Advice advice)//为什么要用final修饰??
* 该方法有两个参数:目标标类对象,通告类(某类)对象,并返回一个指定接口(target所实现的接口)的代理类实例,
* 如:Object proxy = newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h);
return proxy;
* 4, 定义一个目标类的接口的引用如:Collection proxy=getProxy(target,advice);
* 5,调用该代理类所代理目标类拥有的方法(会自动调用添加的功能。
* 注意:目标类必有是实现某个或某些接口
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2