SSM-Spring-12:Spring中NameMatchMethodPointcutAdvisor名称匹配方法切入点顾问

释放双眼,带上耳机,听听看~!

 

 


1
2
1------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
2

 

 

advice 是通知
advisor 是顾问

**顾问(Advisor)
**

通知Advice是Spring提供的一种切面(Aspect)。但其功能过于简单,只能
将切面织入到目标类的所有目标方法中,无法完成将切面织入到指定目标方法中。

**
顾问Advisor是Spring提供的另一种切面。其可以完成更为复杂的切面织入功能,能选择性的将增强切面中的部分方法。**

PointcutAdvisor是顾问的一种,可以指定具体的切入点。顾问将通知进行了包装,会根据不同的通知类型,在不同的时间点,
将切面织入到不同的切入点。

**PointcutAdvisor接口有两个较为常用的实现类:

*:NameMatchMethodPointcutAdvisor 名称匹配方法切入点顾问

*: RegexpMethodPointcutAdvisor 正则表达式方法切入点顾问
**

 

**<property name="pattern" value=".\*do.\*"></property> 表示方法全名(包名,接口名,方法名)

运算符 名称 意义

. 点号 表示任意单个字符

  • 加号 表示前一个字符出现一次或者多次

* 星号 表示前一个字符出现0次或者多次**

名称匹配方法切入点顾问 NameMatchMethodPointcutAdvisor
<!– 03.配置顾问 advisor 包装 advice–>
<bean id="beforeAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="beforeAdvice"></property>
<property name="mappedNames" value="do\*"></property>
</bean>

名称匹配方法切入点顾问方法的案例

一个需要增强的类:SomeServiceImpl

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1package cn.dawn.day15advisor01;
2
3
4/**
5 * Created by Dawn on 2018/3/8.
6 */
7public class SomeServiceImpl {
8    public void doSome() {
9        System.out.println(&quot;do something&quot;);
10    }
11    public void doAny() {
12        System.out.println(&quot;do Any&quot;);
13    }
14}
15

 

增强内容的类

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1package cn.dawn.day15advisor01;
2
3import org.springframework.aop.AfterReturningAdvice;
4
5import java.lang.reflect.Method;
6
7/**
8 * Created by Dawn on 2018/3/5.
9 */
10/*后置增强*/
11public class LoggerAfter implements AfterReturningAdvice {
12    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
13        System.out.println(&quot;===============after==================&quot;);
14    }
15}
16

 

配置文件

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
2&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
3       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
4       xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;
5       xmlns:p=&quot;http://www.springframework.org/schema/p&quot; xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
6       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans
7       http://www.springframework.org/schema/beans/spring-beans.xsd
8       http://www.springframework.org/schema/aop
9       http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd&quot;&gt;
10    &lt;!--要增强的对象--&gt;
11    &lt;bean id=&quot;service&quot; class=&quot;cn.dawn.day15advisor01.SomeServiceImpl&quot;&gt;&lt;/bean&gt;
12    &lt;!--增强的内容--&gt;
13    &lt;bean id=&quot;myadvice&quot; class=&quot;cn.dawn.day15advisor01.LoggerAfter&quot;&gt;&lt;/bean&gt;
14    &lt;!--顾问--&gt;
15    &lt;bean id=&quot;myadvisor&quot; class=&quot;org.springframework.aop.support.NameMatchMethodPointcutAdvisor&quot;&gt;
16        &lt;property name=&quot;advice&quot; ref=&quot;myadvice&quot;&gt;&lt;/property&gt;
17        &lt;!--&lt;property name=&quot;mappedNames&quot; value=&quot;do*&quot;&gt;&lt;/property&gt;--&gt;
18        &lt;property name=&quot;mappedNames&quot; value=&quot;doAny&quot;&gt;&lt;/property&gt;
19    &lt;/bean&gt;
20    &lt;!--代理工厂bean--&gt;
21    &lt;bean id=&quot;proxyfactory&quot; class=&quot;org.springframework.aop.framework.ProxyFactoryBean&quot;&gt;
22        &lt;!--要增强的对象--&gt;
23        &lt;property name=&quot;target&quot; ref=&quot;service&quot;&gt;&lt;/property&gt;
24        &lt;!--增强的内容--&gt;
25        &lt;property name=&quot;interceptorNames&quot; value=&quot;myadvisor&quot;&gt;&lt;/property&gt;
26    &lt;/bean&gt;
27
28&lt;/beans&gt;
29

 

顾问的mappedNames的值可以做操作,让你想让匹配到的方法才能匹配到,可以用可以说是?通配符?的方式,类似do*或者直接写方法名doAny或者用逗号分割俩个方法dosome,doAny

少年,你明白了吗?

单测方法:

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1package cn.dawn.day15advisor01;
2
3import org.junit.Test;
4import org.springframework.context.ApplicationContext;
5import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7/**
8 * Created by Dawn on 2018/3/3.
9 */
10public class test20180305 {
11    @Test
12    /*aop代理工厂bean异常增强*/
13    public void t01(){
14        ApplicationContext context=new ClassPathXmlApplicationContext(&quot;ApplicationContext-day15advisor01.xml&quot;);
15        SomeServiceImpl service = (SomeServiceImpl) context.getBean(&quot;proxyfactory&quot;);
16
17        service.doSome();
18        service.doAny();
19
20    }
21}
22

 

给TA打赏
共{{data.count}}人
人已打赏
安全技术

c++ list, vector, map, set 区别与用法比较

2022-1-11 12:36:11

安全漏洞

GitLab 10.0.4, 9.5.9 和 9.4.7 发布,修复多个漏洞

2017-10-19 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索