继续学习springAOP—把通知封装起来就是我们的顾问了

Posted Java联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继续学习springAOP—把通知封装起来就是我们的顾问了相关的知识,希望对你有一定的参考价值。

温馨提示:本问阅读需要4分钟,建议收藏后阅读!


好的各位小伙伴

又到了分享知识的时间

准备好了吗?

今天的分享的顾问

顾问(Advisor)

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


这是我们上一次的配置文件,今天我们继续在上面进行演示。


继续学习springAOP—把通知封装起来就是我们的顾问了


PointCutAdvisor 是顾问的一种,它是一个接口,有两个实现类。


NameMatchMethodPointCutAdvisor   名称匹配方法 切入点顾问

利用名称匹配定义一个前置顾问!包含了指定通知和指定的方法!


继续学习springAOP—把通知封装起来就是我们的顾问了


这样我们的这个前置顾问就只对 addStudent 这个方法有效,对 serviceStudent 里面的其他方法没有效果。


注册前置顾问生成器


继续学习springAOP—把通知封装起来就是我们的顾问了


测试一下


继续学习springAOP—把通知封装起来就是我们的顾问了


继续学习springAOP—把通知封装起来就是我们的顾问了


要是我们想要给其他的方法添加前置顾问,可以像下图这样把所有的方法列出来。


继续学习springAOP—把通知封装起来就是我们的顾问了


或者,在利用 *Student ,这样就可以匹配所有方法名后面是 Student 的方法了。


继续学习springAOP—把通知封装起来就是我们的顾问了


注:这种方法只能匹配像addStudent,delStudent这种的,getStudentList是匹配不到的!


RegexpMethodPointCutAdvisor  正则表达式方法匹配切入点顾问


a: * 匹配前面的子表达式任意次  比如: ab* 能匹配 a ab abb abbb ... 

b: + 匹配前面的子表达式一次或者多次   比如: ab+ 能匹配 ab abb abbb

c: . 匹配除"\r\n"之外的任意字符,

.*  代表任意的一个字符串  

.*add.* 代表包含add字符的任意字符串


我们来做一个例子,利用正则表达式定义一个后置顾问,匹配所有含有add的方法。


继续学习springAOP—把通知封装起来就是我们的顾问了


注册后置顾问代理生成器


继续学习springAOP—把通知封装起来就是我们的顾问了


测试一下!


继续学习springAOP—把通知封装起来就是我们的顾问了


只有 addStudent 方法有了后置通知,delStudent 方法是没有的!同样的这里也是可以使用数组的方式。


继续学习springAOP—把通知封装起来就是我们的顾问了


继续学习springAOP—把通知封装起来就是我们的顾问了


spring提供了自动代理生成器来解决要定义多个代理的问题


有如下两种方式 

默认advisor自动代理生成器

为配置文件里面所有的advisor自动生成代理 ,会代理配置文件里面所有注册的目标对象,我们之前注册代理生成器的一步就可以省略了!


继续学习springAOP—把通知封装起来就是我们的顾问了


测试一下!注意我们直接调用了我们的类,并没有去调用任何代理生成器


继续学习springAOP—把通知封装起来就是我们的顾问了


这样有一个弊端,比如我们遇到只需要为几个类添加代理的情况,这个时候我们就可以利用第二种方法!

bean名称自动代理生成器


继续学习springAOP—把通知封装起来就是我们的顾问了


可以在图片上红框标出的部分,添加我们需要代理的目标类,以及所需的代理。


继续学习springAOP—把通知封装起来就是我们的顾问了


总之以上各种技术的运用 ,无非就是为了一个目标 :将我们编写的切面的实现(通知/顾问)织入到某些类的某些方法当中。小伙伴们加油吧!


今天就到这里了

再见了

拜拜


继续学习springAOP—把通知封装起来就是我们的顾问了


继续学习springAOP—把通知封装起来就是我们的顾问了


有任何问题都可以在文章留言,娜姐都看着的呢!

合作,投稿,转载,版权问题请联系 李娜:Lina_Java




以上是关于继续学习springAOP—把通知封装起来就是我们的顾问了的主要内容,如果未能解决你的问题,请参考以下文章

SpringAOP之使用切入点创建通知

Spring学习记录

springAOP

SpringAOP概念

SpringAop环绕通知和JoinPoint and ProceedingJoinPoint

基于注解的Spring AOP