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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何苦似梦离 中级黑马   /  2014-2-11 11:03  /  1232 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何苦似梦离 于 2014-2-11 21:03 编辑

Collection px2 = (Collection)Proxy.newProxyInstance(
                                                        Collection.class.getClassLoader(),
                                                        new Class[]{Collection.class},
                                                        new InvocationHandler()
                                                        {
                                                                ArrayList target = new ArrayList();
                                                                @Override
                                                                public Object invoke(Object proxy, Method method, Object[] args)
                                                                                throws Throwable
                                                                {
                                                                        
                                                                        return method.invoke(target, args);
                                                                        // TODO Auto-generated method stub
                                                               
                                                                }
                                                        }
                                                        );
                px2.add("213"); //这里每次调用都会去找invoke方法,是不是InvocationHandler的对象是唯一的,不然怎么操作同一数据
                px2.add("212");        
                px2.add("2g");        
                System.out.println(px2.size());问题就是想问 new InvocationHandler()这个匿名内部类的生命周期



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

6 个回复

倒序浏览
我也想知道它是什么时候被销毁的,
回复 使用道具 举报
InvocationHandler 是代理实例的调用处理程序 实现的接口。

每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。

点评

感谢,不过这不是我要问的问题  发表于 2014-2-11 12:56
回复 使用道具 举报
Proxy.Proxy.newProxyInstance(Collection.class.getClassLoader(),
                   new Class[]{Collection.class},
                   new InvocationHandler())
会创建一个代理类对象。对象内部有一个InvocationHandler类型的变量h指向new InvocationHandler()创建的对象
px2又引用了Proxy创建的代理类对象。
所以只要px2在,且引用着Proxy创建的代理类对象。那么new InvocationHandler()创建的对象就一直在。

点评

偶也,谢谢  发表于 2014-2-11 21:02

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
e.c 发表于 2014-2-11 20:00
Proxy.Proxy.newProxyInstance(Collection.class.getClassLoader(),
                   new Class[]{Coll ...

如果这样px2 =null;
那么Proxy创建的代理类对象和new InvocationHandler()创建的对象就是可回收的。*向上没有被引用)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马