Spring动态代理

一、什么是代理?
代理是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。可以不修改目标对象,对目标对象功能进行拓展。在我们学习Spring的时候就会发现,AOP(面向切面编程)的底层就是代理。

代理的实现可以分为静态代理和动态代理。动态代理又根据实现的方式分为:基于JDK接口的动态实现和基于Cglib类的动态实现

为什么需要代理?
代理的目的是为了使被代理类的功能更加纯粹,不用考虑其他的问题,其他的一些操作都可以在代理类中完成。

在javaweb中就用一个典型的例子,我们可以将service层看做是dao层的代理,dao层需要专注于纯粹的数据库交互。

代理的好处

可以使真实角色的操作更加纯粹,不用关注一些公共的业务。
公共的业务直接交给代理角色,实现了业务的分工。
公共业务发生扩展时,可以集中操作。

什么是动态代理?
使用jdk的反射机制,创建对象的能力,创建的是代理类的对象。而不用你创建类文件。不用写java文件。

**动态:**在程序执行时,调用JDK提供的方法才能创建代理类的对象。

jdk动态代理,必须有接口,目标类必须实现接口,没有接口时,需要使用cylib动态代理。
 

核心类

 

 增强类

 

测试类

 

Spring配置文件

 interfaces:
一个Interface对象的数组,就是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了, 通俗的讲就是被代理类所实现的接口,而代理类也需要这个接口,否则它怎么知道你要用到哪个方法呢
 

一个InvocationHandler对象,就是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上,也就是需要怎么实现对被代理对象的加强。

InvocationHandler接口:

作用:内部写增强代码

内部的invoke()方法:

invoke()方法(调用):目标类中的接口方法都会经过该方法

此方法内部写对方法的增强部分
注意使用匿名内部类需要调用外部成员变量,外部成员变量要设置为final

 proxy:  所代理的那个真实对象


method: 所要调用真实对象的某个方法的Method对象,通过method.invoke(目标类, 参数)来调用目标类中的方法。


args:  调用真实对象某个方法时接受的参数,为method.invoke()方法提供参数,参数就是目标类中被调用方法上需要的参数
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值