黑马程序员技术交流社区

标题: proxy类问题 [打印本页]

作者: 周洋    时间: 2012-4-4 20:48
标题: proxy类问题
proxy类有一个静态方法getproxyClass(ClassLoader loader, Class<?>...... interfaces),如果只有一个接口时,通常用的是与接口相同的类加载器。那么如果有多个接口时,应该用哪个类加载器呢?
作者: 田啸    时间: 2012-4-4 21:10
本帖最后由 田啸 于 2012-4-4 21:22 编辑

loader 是你想要定义的代理类的类加载器
interfaces - 该代理类要实现的接口列表,一个代理类可以实现一个到多个接口

你需要先确定你想要的代理类,再确定你想要的代理类所需要实现的接口,而不是根据一堆接口去确定代理类
如下面的例子,是获取代理类的通用方法:

private static Object getProxy(final Object target,final Advice advice) {
        Object proxy = Proxy.newProxyInstance(
                                 target.getClass().getClassLoader(), //目标代理类的ClassLoader
                     target.getClass().getInterfaces(),//通过目标代理类获取对应的接口
                                 new InvocationHandler(){
              
                                @Override
                                public Object invoke(Object proxy, Method method, Object[] args)
                                                throws Throwable {
                                        advice.BeforeMethod(method);
                                        Object reVal = method.invoke(target, args);
                                        advice.AfterMethod(method);
                                       
                                        return reVal;
                                }
           
    }
   );
        return proxy;
}
作者: 翟友伟    时间: 2012-4-6 12:12
newProxyInstance(
                                Collection.class.getClassLoader(),   ---------------------------------- 不同的接口 对于不同的类加载器   实现类.class.getClassLoader()
                                new Class[]{Collection.class},                                                       new Class[]{Collection1.class,Collection2.class,..........}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2