Spring AOP(三)-AOP的Advisor

一、spring 切面的Advisor

顾问(Advisor) : 他将通知进行了包装,根据通知的不同类型,在不同的时间点,将切面织入到指定的目标对象的某些连接点(方法)。

PointCutAdvisor是顾问的一种,它是一个接口,有两个实现:
* NameMatchMethodPointCutAdvisor 名称匹配方法 切入点顾问
详见appliactionContext.xml AdvisorTest.testBeforeAdvisor();

* RegexpMethodPointCutAdvisor 正则表达式方法匹配切入点顾问
a: * 匹配前面的子表达式任意次 比如: ao* 能匹配 a ao aoo aoooooo
b: + 匹配前面的子表达式一次或者多次 比如: ao+ 能匹配 ao aoo aooo
c: . 匹配任意字符 除"\r\n"之外的
.* 代表任意的一个字符串 .*add.* 代表包含add字符的任意字符串
详见appliactionContext.xml , AdvisorTest.testAfterAdvisor();
因为上节中我们学习了advice通知,那么它也有缺点,比如,通知只能切入目标类的所有方法,不能指定某些方法,(那么我可以解决这个问题,通过顾问对通知的封装而实现.
注意aop的这个方法经典的方法在实际开发中很少用,但是对后面的xml配置以及AspectJ注解开发的理解非常有用
1.我们采用名称名称匹配的方法
首先创建一个applicationContext-advisor.xml的配置文件

创建测试方法

结果:

也可以在配置文件中以数组的方式也可以得到同样的效果


2.通过正则表达式配置切入点顾问
同样配置applicationContext-advisorxml

测试方法

结果:

3. Spring提供了自动代理生成器来解决要定义多个代理的问题 ,有如下两种方式:
DefaultAdvisorAutoProxyCreator 可代理所有Bean自动代理生成器
* 默认advisor自动代理生成器 (为配置文件里面所有的advisor自动生成代理)
详见AtuoProxyCreatorTest .java , appliactionContext.xml
注意:1 :为配置文件里面所有的advisor自动生成代理 /会代理配置文件里面所有注册的目标对象

BeanNameAutoProxyCreator 可选择某些切面自动代理生成器
* bean名称自动代理生成器
可以配置新的applicationContext-auto.xml

重新定义一个接口,IPersonDao,实现addStudent()和midify()方法,并注册该类
测试及结果:


也可以为指定的bean配置代理生成器

在这是userDao的bean没有personDao的bean,我们一起来看看结果

如果改为personDao则同理

4.总结:
以上的各种技术无非就是,将我们编写的切面的实现(通知/顾问)织入到某些类的某些方法当中.

这些都是帮助理解AOP的思想,对我们后面的注解有较好的理解.

下节我们继续学习AOP的AspectJ基于注解的开发(前三节都是铺垫)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的小巍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值