动态代理---JDK

一、原理简述

AOP的切面编程用到了JDK动态代理和Cglib动态代理,它们各有优劣,这里简单介绍下JDK动态代理的使用。JDK动态代理是java内部反射机制来实现的,它的应用前提是

目标类基于统一的接口

二、使用简述

1)创建接口mobile

2)创建接口phone

3)创建mobile和phone接口的实现类


4)创建扩展功能接口


5)创建扩展功能实现类

6)InvocationHandler


7)测试1


8)结果1

9)测试2

10)结果2


三、总结

1)目标对象Iphone,实现了mobile和phone接口,在创建代理对象proxy的时候,我们可以将生成的对象任意强转为任意一个接口类型,转为那个,

就代理哪个接口的方法。

2)注意:目标对象必须实现接口;

3)加强的方法可以在原方法执行前、后或前后执行;

4)mobile.getClass().getInterfaces(),这句代码的意思就是获取目标对象实现的接口,然后创建实现了统一接口的代理对象,它的返回值是一个Class类型的数组;

5)代理对象创建完成后,调用的是代理对象的方法(因为实现了统一的接口所以目标对象的实现了接口的方法在代理对象中都有这些方法),这样就在代理对象中

实现了对目标对象方法功能的扩展。

6)标识符解释

Object proxy ---代理对象

Method method ---目标对象方法对象

Object[] args ---目标对象方法需要传的参数列表,可能是多个参数,因此这里的数据类型是数组

Object invoke = method.invoke(mobile, args); ---使用反射调用目标对象方法,mobile为目标对象,不可以是生成的代理对象,否则死循环

Phone proxy ---生成的代理对象,它的类型需要强转为统一接口中的某一个(因为目标对象可能实现了多个接口)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值