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

© 梁宝昌 中级黑马   /  2014-9-10 21:16  /  1452 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

9,代理(面试时全问了)
|---定义:一个已近开发好了的目标类,想为这个类增加一些系统功能,这时我们就可以编写一个与目标类具有相同接口的代理类,代理类的
每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码,这时候调用代理类就可以获得目标类里面的方法。
|---动态代理类:要为系统中的各种接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理方式,将是一件非常麻烦的事情!写成
百上千个代理类,是不是太累!JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类,动态类往往要实现一个
或多个接口,当目标类没有实现接口时,想得到动态代理类就需要使用CGLIB库,可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所
以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库
|---加系统功能的位子:  1.在调用目标方法之前
    2.在调用目标方法之后
    3.在调用目标方法前后
    4.在处理目标方法异常的catch块中
|---动态代理的三种创建方式(老师叫我把三种方式的代码大致口述一遍)(自己写一遍吧)
  1,Proxy.getProxyClass(类加载器,接口)获取字节码文件,在根据字节码获取构造函数,Proxy只有一个带参的构造函数参数位
InvocationHandler的对象,通过反射获取,在newInstance获取对象;
  2,使用匿名内部类:new InvocationHandler(){}
  3, Proxy.newProxyInstance方法

3 个回复

倒序浏览
面试问这么全!!看来视频要多看几遍呀。楼主整理的对我很有帮助,赞一个!
回复 使用道具 举报
楼主太能了,谢谢
回复 使用道具 举报
挺全的,推荐
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马