首页 > 代码库 > sping 面向切面编程之引入通知
sping 面向切面编程之引入通知
必须了解其他四个通知: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=http://www.mamicode.com/"王大锤" /> </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 王大锤 后置通知被调用 |
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。