当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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


转载于:https://my.oschina.net/huhaoren/blog/291744

相关文章:

  • 自定义标签简介
  • 一张图知道HTML5布局(图)
  • 七牛云假注销小指南
  • Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴
  • CentOS7简单部署NFS
  • Axis2发布webservice(1)--0配置发布
  • 从零开始的无人驾驶 1
  • Redis中的lru算法实现
  • 数据库之开源数据库
  • 19-02-19
  • Linux软件包的管理--YUM
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 自己写代码生成器 (一)
  • Redis的resp协议
  • 炒冷饭系列:设计模式 工厂方法模式
  • 【知识碎片】第三方登录弹窗效果
  • ES6语法详解(一)
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Magento 1.x 中文订单打印乱码
  • rabbitmq延迟消息示例
  • react 代码优化(一) ——事件处理
  • react-native 安卓真机环境搭建
  • vue自定义指令实现v-tap插件
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 如何设计一个比特币钱包服务
  • 少走弯路,给Java 1~5 年程序员的建议
  • 项目管理碎碎念系列之一:干系人管理
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • python最赚钱的4个方向,你最心动的是哪个?
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​插件化DPI在商用WIFI中的价值
  • !!java web学习笔记(一到五)
  • #includecmath
  • #laravel 通过手动安装依赖PHPExcel#
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (二十三)Flask之高频面试点
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (利用IDEA+Maven)定制属于自己的jar包
  • (七)理解angular中的module和injector,即依赖注入
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ 第一章] JavaScript 简史
  • [20181219]script使用小技巧.txt
  • [Android]一个简单使用Handler做Timer的例子
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [AR Foundation] 人脸检测的流程
  • [BT]BUUCTF刷题第9天(3.27)
  • [Codeforces1137D]Cooperative Game
  • [Contiki系列论文之2]WSN的自适应通信架构