动态代理

反射
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的代理类的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值