spring 静态代理,动态代理理解

 

 

自定义一个业务类 ,实现这个类中方法的增强,用动态代理实现

业务类,也就是目标类

 代理类:

对那些方法可以增强,我们称为连接点

在代理类中实例化目标类对象,可以在调用目标类的方法前后增强该方法,但是这样的弊端是,每一个目标类,都要写一个代理类,来对其方法手动增强,而且增强的方法,写成硬编码也是不好的(也应该可以让他人调用),这样显然不好。

动态代理有两种:CGLB动态代理,JDK动态代理,用的更多的是JDK动态代理

CGLIB的动态代理:从字节码的级别进行代理,会为每一个目标生成对应的子类

 JDK动态代理:运行过程中进行动态代理,必须进行接口的实现,jdk动态代理的过程中,生成的动态代理对象与目标对象是同一个接口实现

JDK动态生成代理类,重要实现下面两个类:  调用处理程序也就是代理类,在这里用this代表当前代理类

 注意:这里的Proxy是反射包中的

 

 里面传递的三个参数分别是:类加载器,目标类的接口(也就是DogI,必须和目标类是同一个接口),代理类

 

调用该方法需要实现InvocationHandler这个接口,并实现该接口中的invoke方法

 在实例化DogJDKPROXY类的后,调用getProxyObject()方法要传递一个目标对象,在此例中传入了new Dog()(new一个Dog类的匿名对象),传递过来的目标对象赋值给DogJDKPROXY类中的target对象,并返回一个代理对象,代理对象强转为DogI对象,并调用Dog类的方法,DogI类是Dog类的接口

 

以上是JDK动态生成Dog类的代理对象。

业务方法增强:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值