文档章节

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

binhu
 binhu
发布于 2014/07/16 23:36
字数 604
阅读 467
收藏 2

必须了解其他四个通知: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 王大锤
后置通知被调用


© 著作权归作者所有

binhu
粉丝 19
博文 209
码字总数 205648
作品 0
合肥
私信 提问
spring aop , tx

一 .面向切面编程(AOP)的基础概念: 以一个普通的java方法来举例 a. 横切关注点:如上面5个通知的位置,在java对象中,可以这些具有类似共同处理逻辑的位置加入如权限验证、事物处理、日志记...

SKYCOBS
2016/08/18
25
0
【Spring实战】面向切面编程

本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 软件系统中的一些功能需要用到应用程序的多个地方,但是我们又不想在每个点都明确调用它们。日...

谢随安
2017/11/01
0
0
《Spring5学习》04 - 面向切面编程

一、Spring面向切面编程的基本概念 面向切面编程(即AOP):把项目中需要再多处使用的功能比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。 横切关注...

老韭菜
2018/08/19
108
0
spring aop 日志拦截器的实现

利用 spring aop 的 around 来实现日志拦截器,此拦截器负责打印抛出到顶层的异常日志。 具体实现 引入相关切面依赖 日志拦截器的配置 配置拦截器,配置切面作用的范围的表达式 知识点扩展 ...

liwei2000
2018/10/11
40
0
Spring AOP 面向切面编程必须知道的事

1、概览 什么是面向切面编程? 面向切面编程是一种编程范式(其他常见的编程范式有 面向过程编程,面向对象编程OOP,面向函数编程,面向事件驱动编程,面向切面编程),它不是一种编程语言,...

Oo若离oO
09/04
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
57分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
59分钟前
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部