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="王大锤" />
    </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

时间: 2024-10-26 05:30:24

sping 面向切面编程之引入通知的相关文章

Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理 -- 3.情景举例 ①数学计算器接口[MathCalculator] int add(int i,int j); int sub(int i,int j); int mul(int i, int j); int div(int i,int j); 因为后面的通知方法需要返回值,所以在这里类型声明为 int 类型 public

Javascript aop(面向切面编程)之around(环绕)

Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点.但是利用aop可以有效的改善js代码逻辑,比如前端框架dojo和yui3中AOP则被提升至自定义事件的一种内在机制,在源码中随处可见.得益于这种抽象使得dojo的自定义事件异常强大和灵活.dojo中aop的实现在dojo/aspect模块中,主要有三个方法:before.after

sprint.net(2) AOP面向切面编程,spring.net的环绕通知;Spring.net的AOP通知的四种类型

AOP 有点类似于我们MVC里面的Filter过滤器,例如在MVC里面,如果给一个Action上打一个标签,就可以在这个Action执行之前或者之后,额外的执行一个方法,这个就相当于是面向切面编程. 无侵入式的. (也就是在不改变原来的代码的情况下,来跳转到一个其他的方法,执行完毕后回到主方法..),但是spring.net的AOP更牛叉,只需要在xml里面配置,就可以了,不需要在方法上面打特性的标签,也不需要继承什么类(例如MVC的过滤器是继承了ActionFilterAttribute) 主

浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring框架的,这就说明你有权选择是否要用AOP来完成一些业务. AOP面向切面编程,通过另一种思考的方式,来弥补面向对象编程OOP当中的不足,OOP当中最重要的单元是类,所以万物皆对象,万物皆是 对象类.而在AOP的模块单元中,最基础的单元是切面,切面对切点进行模块化的管理. 最后再提一句:Spring当

spring基础(3:面向切面编程)

一.面向切面编程 ??Spring的基础是IOC和AOP,前面两节对IOC和DI做了简单总结,这里再对AOP进行一个学习总结,Spring基础就算有一个初步了解了. ??在软件开发中,我们可能需要一些跟业务无关但是又必须做的东西,比如日志,事务等,这些分布于应用中多处的功能被称为横切关注点,通常横切关注点从概念上是与应用的业务逻辑相分离的.如何将这些横切关注点与业务逻辑在代码层面进行分离,是面向切面编程(AOP)所要解决的. ? 横切关注点可以被描述为影响应用多处的功能,切面能够帮助我们模块化横

Spring面向切面编程

  1.面向切面编程(AOP)的概念:把项目中需要在多处用到的功能,比如日志.安全和事物等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用.   2.术语解释:        横切关注点:分布应用于多处的功能        切面:横切关注点可以被模块化为一个类,这个类被称为一个切面        通知(advice):切面要完成的工作.Spring的通知有5种类型:before.after.after-returning.after-throwing和around这五种类型.    

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

Spring框架——AOP(面向切面编程)详解

 1 AOP概述 ●AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充. ●AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点. ●在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类.这样一来横切关注点就被模块化到特殊的类里--这样的类我们通常称之为"切面".

初识Aop(面向切面编程)

AOP面向方面/面向切面编程 AOP将分散在系统中的功能块放到一个地方- 切面 可以声明式的定义何时何地应用这些功能,而不是在需要新功能的地方修改代码 好处每个业务逻辑放在一个地方,不是分散到代码各个角落.业务模块只包含核心功能,辅助功能转到切面中,使其更加清晰.关注的是共同处理.通过spring配置把某个作用应用到多个点上.提高灵活性 重要术语切面(Aspect):就是你要实现的交叉功能---共通业务处理可以被切入到多个目标对象.并且多次使用连接点(Joinpoint):应用程序执行过程中插入