A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周洋 黑马帝   /  2012-4-4 20:48  /  1594 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

proxy类有一个静态方法getproxyClass(ClassLoader loader, Class<?>...... interfaces),如果只有一个接口时,通常用的是与接口相同的类加载器。那么如果有多个接口时,应该用哪个类加载器呢?

2 个回复

正序浏览
newProxyInstance(
                                Collection.class.getClassLoader(),   ---------------------------------- 不同的接口 对于不同的类加载器   实现类.class.getClassLoader()
                                new Class[]{Collection.class},                                                       new Class[]{Collection1.class,Collection2.class,..........}
回复 使用道具 举报
本帖最后由 田啸 于 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;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马