`

Spring AOP系列之四:前置通知

阅读更多
  通过实现org.springframework.aop.MethodBeforeAdvice来完成前置通知:

public class CarBeforeAdvice implements MethodBeforeAdvice {

	@Override
        // method 目标类方法,args 方法参数,target 目标对象
	public void before(Method method, Object[] args, Object target) throws Throwable {
		System.out.println("Welcome to the car shop");
	}
}


Spring配置文件beans-before-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="carBeforeAdvice" class="com.john.spring.aop.CarBeforeAdvice" />
  
  <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>carBeforeAdvice</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-before-advice.xml" });
	Vehicle vehicle = (Vehicle) ctx.getBean("proxyBean");
	vehicle.info();
}


输出:
Welcome to the car shop
Car name: Superb, price: 220000


附:
info()调用的时候,调用org.springframework.aop.framework.adapter.MethodBeforeAdviceAdapter类的getInterceptor方法:
class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {

	public boolean supportsAdvice(Advice advice) { // 是否支持指定通知
		return (advice instanceof MethodBeforeAdvice);
	}

	public MethodInterceptor getInterceptor(Advisor advisor) {
		MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice(); // 获取通知
		return new MethodBeforeAdviceInterceptor(advice);
	}
}


然后调用org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor的invoke方法:
public Object invoke(MethodInvocation mi) throws Throwable {
	this.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis() ); // 前置通知实现类的before方法。这里是CarBeforeAdvice类的实例
	return mi.proceed(); // 目标类方法的执行。这里是info()。
}
分享到:
评论

相关推荐

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

    1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用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 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框架中,使用XML配置文件将业务Bean组织起来。首先,配置`MyServiceBean`实例,并注入所需的属性,如用户目录。然后,定义AOP的切面,包括切入点和通知,以增强业务Bean的...

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

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

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

    总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...

    SpringAop xml方式配置通知

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

    JavaEE Spring AOP使用

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

    spring aop 学习笔记

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

    spring AOP的运用

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

    Spring AOP需要jar包.rar

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

    Spring AOP完整例子

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

    springAop的配置实现

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

    SpringAop学习笔记以及实现Demo

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

    spring AOP注解的应用1

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

    springAOP配置动态代理实现

    动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...

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

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

    Spring Aop的简单实现

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

    spring aop管理xml版

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

Global site tag (gtag.js) - Google Analytics