java jdk 动态代理

目标:为实现了统一接口的子类的一个共同方法,在这个共同方法之前,或者之后,为这所有的子类加入共同的处理逻辑


实现途径:代理模式;jdk反射机制。


具体步骤:

第一步:写出一个代理类,该类实现了InnovationHandler接口,并实现了invoke(Object proxy,Method method, Object[] args)方法。jdk设计此接口的目的:为需要织入共同处理逻辑的被代理方法,提供了这个接口,方法中的第一个参数为被代理类,通过这个引用,可以执行你想要织入的逻辑代码。method为被代理对象内部的需要被代理的方法,args为需要被代理的方法的参数数组。在这个方法里有一行代码为:method.invoke(beenProxyObect,args);这个是执行了被代理对象的被代理方法。这个方法之前或者之后可以加入逻辑代码。

第二步:客户端应用:首先new一个被代理的对象。然后new出一个代理对象,并且将被代理对象的引用注入到代理对象里面,可以通过构造方法注入。然后通过Proxy.newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h)动态 得到被代理对象的代理对象。然后调用被代理方法。OK,完成。


原理:利用了java的反射机制,在classloader动态加载类的时候。动态得到子类的类型。动态生成需要的代理对象。反射本质即为 类型参数化,也即是说类的类型都可以作为参数了 。并且被代理的类必须实现了统一的接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值