Java框架学习springAOP—顾问把通知封装起来

好的各位小伙伴

又到了分享知识的时间

准备好了吗?

今天的分享的顾问

顾问(Advisor)

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

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

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

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

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

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

注册前置顾问生成器

测试一下

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

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

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

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

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

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

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

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

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

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

注册后置顾问代理生成器

测试一下!

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

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

有如下两种方式

默认advisor自动代理生成器

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

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

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

bean名称自动代理生成器

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

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

今天就到这里了

再见了

拜拜

本文来自企鹅号 - Java联盟媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏好好学java的技术栈

代理模式,看这篇文章足够了

生活中:代理就是一个人或者一个组织代表其他人去做一件事的现实生活中的。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间...

811
来自专栏猿人谷

腾讯2013年实习生笔试题目(附答案)

下面是我在参加2013年腾讯实习生招聘的笔试题目,当然啦,我个人不可能是完全的记住所有题目,部分是摘自网络的。同时,下面也有一些题目我不会的,希望大家一起商量解...

3888
来自专栏玄魂工作室

Python黑帽编程2.7 异常处理

异常是个很宽泛的概念,如果程序没有按预想的执行,都可以说是异常了。遇到一些特殊情况没处理会引发异常,比如读文件的时候文件不存在,网络连接超时。程序本身的错误也可...

3039
来自专栏Java 源码分析

Bootstrap 源码分析

Netty 源码分析: Bootstrap 1. 结构 先看一个这个类的类层次结构, ? 好,这个结构还是比较明晰的,然后看他的主要字段,因为这些字段比较重...

3072
来自专栏逍遥剑客的游戏开发

UE4学习笔记: Gameplay Classes

2797
来自专栏java一日一条

Spring-涉及到的设计模式汇总

又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。

1423
来自专栏腾讯Bugly的专栏

Android JNI出坑指南

笔者结合自身经验、网上资料对 JNI 的坑进行总结,如果有不正确或遗漏之处欢迎指出。

7607
来自专栏积累沉淀

Java设计模式(八)----代理模式

代理描述 1.生活中: 代理就是一个人或者一个组织代表其他人去做一件事的现实生活中的。在一些情况下,一个客户不想或者不能够直接引用一个对...

2119
来自专栏编程

30个基本的Python技巧和窍门程序员

1.就地交换两个数字。 Python提供了一种直观的方式来分配和交换一行。请参考下面的例子。 x,y = 10,20print(x,y) x,y = y,xpr...

2187
来自专栏魂祭心

原 What Every Dev need

2898

扫码关注云+社区

领取腾讯云代金券