Spring AOP的个人总结

一,问题

今天将代理模式中的静态代理、JDK动态代理跟Cglib的动态代理进行学习,然后顺便了解一下Spring AOP的一些原理

二,解决方案

Spring AOP:
AOP是面向切面编程,它可以实现在原有代码不进行修改的情况下,对该方法进行增强或者说在运行时动态地给它添加代码。
那它是怎么实现的呢?我们首先在配置文件中,将通知类和目标类加载到IOC容器中,
然后再定义切面,切面里面由通知和切入点组成,切入点就是我们要增强的类或方法。将通知织入到切入点中,我们就完成了一个切面的配置,其实在这里一个切面就是一个代理类的意思。
而这个切面实现,使用了代理模式,在我们Spring的AOP里面,使用了两种动态代理方式,一种是JDK的动态代理,另外一种是Cglib的动态代理。
在Spring决定使用哪种动态代理模式前,它会先看这个目标类有没有实现接口,如果有的话,那么就使用JDK的动态代理模式,否则就使用Cglib的动态代理模式来完成代理的实现。
这两种模式的主要区别,就在于JDK的动态代理模式是需要目标类实现接口才能实现的,但是Cglib是基于继承目标类来实现的。这两种方式在调用目标类的方法时,会使用Java的反射机制来进行。
当Spring获取这个代理对象之后,这个代理对象就会被放到IOC容器中,也就是放到ConcurrentHashMap里面,其实那时候,原来存在ConcurrentHashMap中的键值对就已经被修改,它的key值依然是目标类的名称,但是value值被修改成代理对象,所以,我们后面
根据目标类的名称去跟IOC容器拿bean对象的时候,拿到的就是被增强代理对象。这样子,我们在使用目标类的方法时,其实就是使用代理对象的方法。而该方法已经被增强。

本总结参考之:http://www.cnblogs.com/xrq730/p/4919025.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值