码迷,mamicode.com
首页 > 其他好文 > 详细

sping 面向切面编程之引入通知

时间:2014-07-21 10:34:29      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   

必须了解其他四个通知:Sping之aop面向切面编程通知案例

引入通知的目的就是在任意的连接点引入我想要的通知,例如前面四个通知案例的运行结果:

前置通知被调用
调用环绕通知前
hi 王大锤
调用环绕通知后
后置通知被调用
前置通知被调用
调用环绕通知前
bye 王大锤
调用环绕通知后
后置通知被调用

可以看出在被代理类Test1Service的sayHello()以及sayBye()方法(这个两个连接点)切入通知;可是现在我只想在sayHello()方法(这一个连接点)上切入通知该怎么办呢?这就要使用到引入通知,其实说白了就是在配置文件中进行配置。(我现在要求环绕通知只切入到sayHello()方法上)

修改前面案例的配置文件beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <!-- 配置被代理的对象 -->
    <bean id="test1Service" class="com.hubin.aop.Test1Service">
        <property name="name" value="王大锤" />
    </bean>
    <!-- 配置前置通知 -->
    <bean id="myMethodBeforeAdvice" class="com.hubin.aop.MyMethodBeforeAdvice" />

    <!-- 配置后置通知 -->
    <bean id="myMethodAfterAdvice" class="com.hubin.aop.MyMethodAfterAdvice" />

    <!-- 配置环绕通知 -->
    <bean id="myMethodAroundAdvice" class="com.hubin.aop.MyMethodAroundAdvice" />

    <!-- 配置异常通知 -->

    <bean id="myMethodThrowsAdvice" class="com.hubin.aop.MyMethodThrowsAdvice" />

    <!-- 引入通知定义通知的切入点 -->
    <bean id="annotationAdvice"
        class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
        <property name="advice" ref="myMethodAroundAdvice"></property>
        <property name="mappedNames">
            <list>
                <value>sayHello</value>
            </list>
        </property>
    </bean>


    <!-- 配置代理对象(代理对象不需要我们自己写,已经有现成的ProxyFactoryBean类存在了) -->
    <bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!-- 代理接口集 -->
        <property name="proxyInterfaces">
            <list>
                <!--ProxyFactoryBean类会实现下列接口(必须是接口的全路径) -->
                <value>com.hubin.aop.TestServiceInter</value>
                <value>com.hubin.aop.TestServiceInter2</value>
            </list>
        </property>

        <!-- 把通知织入到代理对象相当于将通知和代理对象关联 -->
        <property name="interceptorNames">
            <list>
                <!-- 必须和配置通知的ben的id对应值是相同的 -->
                <value>myMethodBeforeAdvice</value>
                <value>myMethodAfterAdvice</value>

                <!-- 绑定引用通知 -->
                <value>annotationAdvice</value>

                <value>myMethodThrowsAdvice</value>
            </list>
        </property>

        <!-- 配置被代理对象,ref必须和配置代理对象的id对应值相同 -->
        <property name="target" ref="test1Service" />
    </bean>
</beans>

运行结果:

前置通知被调用
调用环绕通知前
hi 王大锤
调用环绕通知后
后置通知被调用

前置通知被调用
bye 王大锤
后置通知被调用


sping 面向切面编程之引入通知,布布扣,bubuko.com

sping 面向切面编程之引入通知

标签:style   blog   http   color   使用   os   

原文地址:http://my.oschina.net/huhaoren/blog/291744

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!