动态代理
2016-01-26 22:19
183 查看
反射
1.java.lang.Class是反射的源头 涉及的反射的类在java.lang.reflect子包下 如Field Method Contrustor Type Package..
当通过Class实例调用getMethods()-->Method.getConstructors()-->Constructor
实例化Class方法(三种)
.class getClass() froName()
非公共的类调用方法加DeClared 如getDeleclaredConstructor 还得调用set.Accessble(true)
2.clazz.getMethods();获取对应的运行类中声明的权限为public方法(包含其父类声明的poblic)
class.getDeclaredMethods获取对应运行类中声明的所有方法(任何权限修饰符都能获取不含父类中的)
调用指定的方法时用最后invoke调用
静态代理 要求被代理类和代理类同时实现相应的一套接口 通过被代理类的对象调用重写接口的方法时 实际上执行的是被代理类的同样的方法调用
动态代理 在程序运行时 根据被代理类及其实现的接口 动态的创建一个代理类 ,当调用代理列的实现的抽象方法时 就发起被代理类同样的方法的调用(涉及到的技术,1实现了InvocationHandler接口实现类 并重写inoke()方法)
2Proxy.newInstance(obj.getClass().getClassLoade(),obj.getClass().Interfaces(),h)
注:obj被代理类对象 h实现了invacationHander接口的实现类对象
动态代理 接口中声明的所有方法都被转移到调用处理器一个集中方法处理
这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。
抽象类。实现对抽象类的动态代理
当通过代理类的对象发起对被重写的方法调用时 都会转为对invoke方法的调用
1被代理类的对象
2创建一个实现了InvacationHandler接口的类的对象
重写invoke();
3动态的创建一个代理类对象 return Proxy.newInstance(obj.getClass().getClassLoade(),obj.getClass().Interfaces(),h)
4 main{
SupperMan man = new SupperMan();//创建一个被代理类的对象
Object obj = MyProxy.getProxyInstance(man);//返回一个代理类的对象
Human hu = (Human)obj;
hu.info();//通过代理类的对象调用重写的抽象方法
调用xx方法 动态的返回一个同样实现了 被代理对象所在类实现的接口xx的代理类的对象
1.java.lang.Class是反射的源头 涉及的反射的类在java.lang.reflect子包下 如Field Method Contrustor Type Package..
当通过Class实例调用getMethods()-->Method.getConstructors()-->Constructor
实例化Class方法(三种)
.class getClass() froName()
非公共的类调用方法加DeClared 如getDeleclaredConstructor 还得调用set.Accessble(true)
2.clazz.getMethods();获取对应的运行类中声明的权限为public方法(包含其父类声明的poblic)
class.getDeclaredMethods获取对应运行类中声明的所有方法(任何权限修饰符都能获取不含父类中的)
调用指定的方法时用最后invoke调用
静态代理 要求被代理类和代理类同时实现相应的一套接口 通过被代理类的对象调用重写接口的方法时 实际上执行的是被代理类的同样的方法调用
动态代理 在程序运行时 根据被代理类及其实现的接口 动态的创建一个代理类 ,当调用代理列的实现的抽象方法时 就发起被代理类同样的方法的调用(涉及到的技术,1实现了InvocationHandler接口实现类 并重写inoke()方法)
2Proxy.newInstance(obj.getClass().getClassLoade(),obj.getClass().Interfaces(),h)
注:obj被代理类对象 h实现了invacationHander接口的实现类对象
动态代理 接口中声明的所有方法都被转移到调用处理器一个集中方法处理
这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。
抽象类。实现对抽象类的动态代理
当通过代理类的对象发起对被重写的方法调用时 都会转为对invoke方法的调用
1被代理类的对象
2创建一个实现了InvacationHandler接口的类的对象
重写invoke();
3动态的创建一个代理类对象 return Proxy.newInstance(obj.getClass().getClassLoade(),obj.getClass().Interfaces(),h)
4 main{
SupperMan man = new SupperMan();//创建一个被代理类的对象
Object obj = MyProxy.getProxyInstance(man);//返回一个代理类的对象
Human hu = (Human)obj;
hu.info();//通过代理类的对象调用重写的抽象方法
调用xx方法 动态的返回一个同样实现了 被代理对象所在类实现的接口xx的代理类的对象
相关文章推荐
- 一起talk C栗子吧(第一百一十三回:C语言实例--线程同步之信号量一)
- javascript语音详解(转载)
- 沿着path路径做动画
- 学习Django
- 项目文件介绍
- webstrom快捷键
- 又要留在北京过年了
- mysql主从复制
- POJ3436 ACM Computer Factory
- 95. Single Number II
- 关于BTRFS 与oracle database
- windgb分析dump文件
- URAL 1735 Theft of the Century
- hdu--3284
- Android 扫描SDCard上的音乐文件以及监听扫描事件
- 【莫比乌斯反演】[HYSBZ/BZOJ2301]Problem b
- Linux CentOS6.5 搭建SVN服务器(一)
- jsp中js获取java的传值
- 二叉树--递归实现
- Ambari源码编译