`

Spring AOP系列之五:后置通知

阅读更多
和前置通知类似,
通过实现org.springframework.aop.AfterReturningAdvice来完成后置通知:

public class CarAfterAdvice implements AfterReturningAdvice {

	@Override
	// returnValue 方法返回值,其它和前置通知相同
	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
		System.out.println("Welcome to come again");
	}
}


Spring配置文件beans-after-advice.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"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
  default-autowire="byName">

  <bean id="car" class="com.john.spring.aop.Car">
  	<property name="name" value="Superb" />
	<property name="price" value="220000" />
  </bean>
  
  <bean id="carAfterAdvice" class="com.john.spring.aop.CarAfterAdvice" />
  
  <bean id="proxyBean" class="org.springframework.aop.framework.ProxyFactoryBean">
  	<property name="proxyInterfaces">
  		<value>com.john.spring.aop.Vehicle</value>
	</property>
	<property name="interceptorNames">
		<list>
			<value>carAfterAdvice</value>
		</list>
	</property>
	<property name="target">
		<ref bean="car" />
	</property>
  </bean>
</beans>


测试:
public static void main(String[] args) {
	ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "beans-after-advice.xml" });
	Vehicle vehicle = (Vehicle) ctx.getBean("proxyBean");
	vehicle.info();
}


输出:
Car name: Superb, price: 220000
Welcome to come again


附:
执行info()时,调用org.springframework.aop.framework.adapter.AfterReturningAdviceAdapter的getInterceptor方法:
public MethodInterceptor getInterceptor(Advisor advisor) {
	AfterReturningAdvice advice = (AfterReturningAdvice) advisor.getAdvice(); // 获取后置通知实例
	return new AfterReturningAdviceInterceptor(advice);
}


然后调用org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor的invoke方法:
public Object invoke(MethodInvocation mi) throws Throwable {
	Object retVal = mi.proceed(); // 执行目标方法
	this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis()); // 执行后置通知方法
	return retVal;
}
分享到:
评论

相关推荐

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    在Spring AOP中,有三种主要的通知类型:前置通知、后置通知和环绕通知。下面将详细解释这三种通知,并通过简单的代码示例进行演示。 **1. 前置通知(Before Advice)** 前置通知在目标方法被调用之前执行,但无法...

    Spring-AOP(前置/后置/环绕)通知的例子

    在这个例子中,我们将深入探讨Spring AOP中的前置通知、后置通知以及环绕通知的实现方式。 前置通知(Before Advice)在目标方法执行前触发,通常用于执行验证、初始化等操作。在Spring AOP中,我们可以使用`@...

    Spring AOP源码深度解析:掌握Java高级编程核心技术

    **通知(Advice)**是AOP中的具体行为,它定义了在特定连接点上执行的代码,如前置通知(@Before)、后置通知(@After)、环绕通知(@Around)和异常通知(@AfterThrowing)。通知可以根据需要在目标方法执行前、后或异常时...

    spring aop jar 包

    Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...

    Spring 前置通知和后置通知

    本文将深入探讨Spring AOP中的前置通知和后置通知,以及它们在实际开发中的应用。 前置通知是指在目标方法执行之前执行的通知。在Spring AOP中,这通过`@Before`注解实现。这个注解用于定义一个切点表达式,匹配到...

    Spring AOP运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。

    1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景

    spring aop依赖jar包

    现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...

    Spring AOP 入门作者:廖雪峰

    ### Spring AOP 入门详解 #### 一、Spring AOP 概述 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个关键特性,它为开发者提供了在运行时动态添加代码(即横切关注点或切面)到已有...

    Spring AOP 16道面试题及答案.docx

    Spring AOP中有五种不同类型的的通知(Advice): 1. 前置通知(Before Advice):在方法执行前执行,使用`@Before`注解。 2. 返回后通知(After Returning Advice):在方法正常返回后执行,使用`@AfterReturning`...

    spring aop 学习笔记

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...

    Spring AOP需要jar包.rar

    Spring AOP支持多种通知类型,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 在实际开发中,配置Spring AOP可以通过XML或者基于注解的方式。XML配置文件中,可以定义&lt;aop:config&gt;元素来开启AOP支持,...

    SpringAop xml方式配置通知

    **Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...

    spring AOP注解的应用1

    本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,包括前置通知、后置通知、返回通知和异常通知。 ### 前置通知(Before通知) 前置通知在目标方法执行之前运行。在Spring AOP中,我们使用`@Before`注解...

    spring AOP的运用

    2. 通知(Advice):通知是在特定连接点(Join Point)执行的代码,它是切面的实现部分,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 3. 连接点(Join Point):程序执行的某个特定点,如方法调用、...

    JavaEE Spring AOP使用

    Spring支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)**:连接点是在程序执行过程...

    springAop的配置实现

    - **通知(Advice)**:在特定连接点上执行的代码,也就是切面要执行的行为,例如前置通知、后置通知、异常通知等。 - **连接点(Join Point)**:程序执行中的某个特定点,如方法调用、异常处理等。 - **切入点...

    Spring Aop的简单实现

    在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会将一系列的 `MethodInterceptor` 注册为 `Callback`,这些 `MethodInterceptor` 执行了 AOP 的逻辑。 在 Spring AOP 的自动代理...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...

    SpringAop学习笔记以及实现Demo

    Spring支持五种类型的Advice:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)**:连接点是在程序执行...

Global site tag (gtag.js) - Google Analytics