17、spring AOP通知——Pointcut、Advisor

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AustinBoris/article/details/56285258

17、spring AOP通知——Pointcut、Advisor

说明:在上一个例子spring AOP通知——Advice中,主要介绍了Advice的四种用法,但是被拦截的bean的所有方法都会被影响,实际上,我们通常只需要拦截一个或者若干个方法即可,而不是所有。

这里我们依然使用上一个例子的demo,但是需要做一些更改。

主要有以下三步即可实现:

第一步:设置目标被拦截的方法名,并且封装称为一个bean
在bean.xml配置文件中添加如下代码:

<!-- 设置切入点 printName -->
    <bean id="helloWorldPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
        <property name="mappedName" value="printName" />
    </bean>

说明:该bean的property属性里的value,即是需要被拦截的方法名

第二步:声明切入点和代理的关系的bean

在bean.xml配置文件中添加如下代码:

<!-- 声明切入点和代理的关系的bean -->
    <bean id="helloWorldAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
        <property name="pointcut" ref="helloWorldPointcut" />
        <property name="advice" ref="adviceAroundService" />
    </bean>

第三步:更改代理 bean

<!-- 设置代理关系的bean -->
    <bean id="adviceServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

        <!-- 被拦截的bean -->
        <property name="target" ref="helloWorld"/>
        <!-- 代理bean -->
        <property name="interceptorNames">
            <list>
                <value>helloWorldAdvisor</value>
            </list>
        </property>
    </bean>

运行结果:
这里写图片描述


使用关键字拦截(正则表达式)

说明:在spring mvc项目中经常出现,例如拦截DAO,Service等等

就像下面这样:更改bean配置文件的

<!-- 声明切入点和代理的关系的bean -->
    <bean id="helloWorldAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
        <property name="patterns">
            <list>
                <value>.*URL.*</value>
            </list>
        </property>
        <property name="advice" ref="adviceAroundService" />
    </bean>

猜你喜欢

转载自blog.csdn.net/AustinBoris/article/details/56285258