• 概述
  • 实例

概述

后置增强在目标方法调用后执行.

实例

代码已托管到Github—> https://github.com/yangshangwei/SpringMaster

例如上面的例子中,在服务生每次服务后,也需要向客人问候,可以通过后置增强来实施这一要求,步骤如下:

创建业务接口类:Waiter.java
创建业务实现类:NativeWaiter.java
创建业务增强类:GreetingAfterAdvice.java
创建配置文件:conf-advice.xml
创建增强测试类:AfterReturingAdviceTest.java

业务接口类

package com.xgj.aop.spring.advice.afterRetruingAdivce;public interface Waiter {void greetTo(String name);void serverTo(String name);
}

业务实现类

package com.xgj.aop.spring.advice.afterRetruingAdivce;public class NaiveWaiter implements Waiter {@Overridepublic void greetTo(String name) {System.out.println("greetTo " + name);}@Overridepublic void serverTo(String name) {System.out.println("serverTo " + name);}}

业务增强类

package com.xgj.aop.spring.advice.afterRetruingAdivce;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;public class GreetingAfterAdvice implements AfterReturningAdvice {/*** 后置增强代码实现,在目标方法执行后调用* * @param returnValue*            代理返回对象* @param method*            目标对象方法* @param args*            目标对象方法参数* @param target*            目标对象* @throws Throwable*/@Overridepublic void afterReturning(Object returnValue, Method method,Object[] args, Object target) throws Throwable {System.out.println("please enjoy youself,Sir!");}}

在配置文件中对其进行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="target" class="com.xgj.aop.spring.advice.afterRetruingAdivce.NaiveWaiter"/><bean id="greetingBeforeAdvice" class="com.xgj.aop.spring.advice.proxyFactory.GreetingBeforeAdvice"/><bean id="greetingAfterAdvice" class="com.xgj.aop.spring.advice.afterRetruingAdivce.GreetingAfterAdvice"/><bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"p:proxyInterfaces="com.xgj.aop.spring.advice.afterRetruingAdivce.Waiter"p:interceptorNames="greetingBeforeAdvice,greetingAfterAdvice"p:target-ref="target"/></beans>

interceptorNames 是String[]类型的,它接收增强Bean的名称而非增强Bean的实例。这是因为ProxyFactory内部在省城代理类时,需要使用增强Bean得嘞,而非增强Bean的实例,以织入增强类中所写的横切代码逻辑。

测试类

package com.xgj.aop.spring.advice.afterRetruingAdivce;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class AfterReturingAdviceTest {@Testpublic void test() {ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/xgj/aop/spring/advice/afterRetruingAdivce/conf-advice.xml");Waiter waiter = ctx.getBean("waiter", Waiter.class);waiter.greetTo("Xiao");waiter.serverTo("GongJiang");}}

运行结果

可以看到,前置、后置增强中的逻辑都成功的织入到目标类NaiveWaiter方法所对应的连接点上。

Spring-AOP 通过配置文件实现 后置增强相关推荐

  1. 攀登Spring珠穆朗玛峰:前置与后置处理器

    文章目录 Spring的前置与后置处理器 前提知识 前置与后置处理器定义 前置处理器:BeanFactoryPostProcessor `postProcessBeanFactory`调用 后置处理器 ...

  2. Spring的9处调用后置处理器

    在Sping的整个生命周期中,有9个地方调用后置处理器.这些后置处理器是spring实现自定义功能或者扩展spring的核心所在 一.实例化前 该方法属于InstantiationAwareBeanP ...

  3. Spring 详解Bean的后置处理器

    Bean的后置处理器详解: Spring当中的后置处理器是Spring体用的一个扩展点,开发者只要去实现,Spring当中的BeanPostProcessor接口,那么就能插手SpringBean实例 ...

  4. 后置增强this advice advises no methods_增强消防意识 提高消防能力 重庆天一新城小学积极参加消防技能比赛活动...

    原标题:增强消防意识 提高消防能力 重庆天一新城小学积极参加消防技能比赛活动 来源:新华网 2020-11-08 14:47 为大力倡导"119"全国消防月宣传活动,切实提高师生的 ...

  5. 在Intellij上面导入项目 AOP示例项目 AspectJ学习 Spring AoP学习

    为了学习这篇文章里面下载的代码:http://www.cnblogs.com/charlesblc/p/6083687.html 需要用Intellij导入一个已有工程.源文件原始内容也可见:link ...

  6. spring之aop(前置通知,后置通知,环绕通知,过滤通知,异常通知)

    1.AOP中关键性概念  连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出 目标(Target):被通知(被代理)的对象 注1:完成具体的业务逻辑 通知(Advice ...

  7. Spring AOP增强(Advice)

    Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情.如方法前做什么,方法后做什么,抛出异常做什么. 再来看一下图 定义Point ...

  8. 【spring aop】连接点(Jointpoint)、切入点(Pointcut)、增强(Advice)、方面/切面(Aspect、Advisor)

    文章目录 前言 1. 先来回顾一下AOP中的一些术语 2. 增强方式简介 2.1 MethodBeforeAdvice前置增强 2.2 AfterReturningAdvice后置增强 2.3 Thr ...

  9. 前置,后置,环绕,异常增强(示例)

    ----------------------------------基础架构: 前置增强 ------------------------------------代码演示: public interf ...

最新文章

  1. 有了这个 IDEA的兄弟,你还用 Navicat 吗?全家桶不香吗?
  2. 【 FPGA 】组合逻辑中的竞争与险象问题(五)
  3. 【⛔C语言“数组名”,不得不说的秘密!⛔】c语言“数组名字“初探
  4. 78. 子集022(回溯法)
  5. lisp 设计盘形齿轮铣刀_机械设计基础——周转轮系传动比的计算
  6. 新生成长记;关于zzulioj1056,幸运数字
  7. Vue学习笔记(九) Vue CLI
  8. python十大必备知识_学Python必备的基础知识
  9. MapReduce的模式、算法和用例
  10. 如何做出好的文档 (要学习前人的经验,不要闭门造车)
  11. iOS:关于加载GIF图片的思考
  12. curl安装的docker卸载
  13. 高工指数首发,德赛西威/哈曼/比亚迪「领衔」智能车机TOP10
  14. 计算机日历教案,计算机基础教学日历.doc
  15. F - Ilya Muromets Gym - 100513F
  16. 小胖 机器人作文_作文《我的小机器人》,学生:这是我自己写的!老师:写的不错...
  17. 华为EMUI10基本可以升鸿蒙,华为EMUI11发布,12月可升级为鸿蒙OS国产操作系统
  18. 什么是闭包?闭包有啥作用?闭包的应用有啥?内存优化?
  19. 掌财社:马桶MT被山寨,聊天宝赚钱不如捡废品,多闪表现平平
  20. CAN扩展帧ID 字节位解释,形象表示PGN

热门文章

  1. C++二进制文件读写操作
  2. 文巾解题1588. 所有奇数长度子数组的和
  3. 深度学习核心技术精讲100篇(八)-keras 实战系列之深度学习中的多任务学习(Multi-task learning)
  4. 深入Java单例模式
  5. airtest自动化测试_自动化测试必备实用工具,帮你提高工作效率|Gitee项目推荐...
  6. ModuleNotFoundError: No module named ‘lib.utils.cython_bbox‘
  7. Hadoop streaming: Exception in thread main java.io.IOException: No space left on device
  8. Adaboost方法分类新闻数据
  9. 一组图诠释CNN及RNN的区别
  10. 【机器学习算法-python实现】矩阵去噪以及归一化