顾问(Advisor)是 Spring 提供的另一种切面。其可以完成更为复杂的切面织入功能。PointcutAdvisor 是顾问的一种, 可以指定具体的切入点。 顾问将通知进行了包装,会根据不同的通知类型,在不同的时间点,将切面织入到不同的切入点。PointcutAdvisor 接口有两个较为常用的实现类:
- NameMatchMethodPointcutAdvisor 名称匹配方法切入点顾问
- RegexpMethodPointcutAdvisor 正则表达式匹配方法切入点顾问
名称匹配方法切入点顾问
NameMatchMethodPointcutAdvisor,即名称匹配方法切入点顾问。容器可根据配置文件中指定的方法名来设置切入点。
(1) 修改配置文件
<!-- 指定切入点:这里匹配的对象是简单方法名 -->
<!-- 指定doFirst方法为切入点方法 -->
<!-- <property name="mappedName" value="doFirst"/> -->
<!-- 指定doFirst、doSecond方法为切入点方法 -->
<!-- <property name="mappedNames" value="doFirst,doSecond"/> -->
<!-- 指定自定义匹配*ir*方法为切入点方法 -->
<property name="mappedNames" value="*ir*"/>
正则表达式方法切入点顾问
RegexpMethodPointcutAdvisor,即正则表达式方法顾问。容器可根据正则表达式来设置切入点。注意,与正则表达式进行匹配的对象是接口中的方法名,而非目标类(接口的实现类)的方法名。
(1) 修改配置文件
<!-- 这里的正则表达式匹配的对象是全限定性方法名 -->
<!-- <property name="pattern" value=".*doFirst"/> -->
<!-- <property name="patterns" value=".*doFirst,.*doSecond"/> -->
<!-- 包含doS的或doT的方法为切入点方法 -->
<!-- <property name="pattern" value=".*doFirst|.*doSecond"/> -->
<property name="pattern" value=".*S.*"/>
正则表达式常用的运算符有三个,如下表:
运算符 | 名称 | 意义 |
---|---|---|
. | 点号 | 表示任意单个字符 |
+ | 加号 | 表示前一个字符出现一次或者多次 |
* | 星号 | 表示前一个字符出现0次或者多次 |