通过实现
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()。
}
分享到:
相关推荐
1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景
**通知(Advice)**是AOP中的具体行为,它定义了在特定连接点上执行的代码,如前置通知(@Before)、后置通知(@After)、环绕通知(@Around)和异常通知(@AfterThrowing)。通知可以根据需要在目标方法执行前、后或异常时...
Spring AOP支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **切点(Pointcut)**:切点是程序执行过程中的...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
#### 四、Spring配置与AOP应用 在Spring框架中,使用XML配置文件将业务Bean组织起来。首先,配置`MyServiceBean`实例,并注入所需的属性,如用户目录。然后,定义AOP的切面,包括切入点和通知,以增强业务Bean的...
在Spring AOP中,有三种主要的通知类型:前置通知、后置通知和环绕通知。下面将详细解释这三种通知,并通过简单的代码示例进行演示。 **1. 前置通知(Before Advice)** 前置通知在目标方法被调用之前执行,但无法...
总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...
**Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...
Spring支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)**:连接点是在程序执行过程...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和抽象化的方法来处理系统中的交叉关注点,如日志、事务管理、安全性等。本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际...
2. 通知(Advice):通知是在特定连接点(Join Point)执行的代码,它是切面的实现部分,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 3. 连接点(Join Point):程序执行的某个特定点,如方法调用、...
Spring AOP支持多种通知类型,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 在实际开发中,配置Spring AOP可以通过XML或者基于注解的方式。XML配置文件中,可以定义<aop:config>元素来开启AOP支持,...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过插入切面来增强或改变程序的行为。在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型...
- **通知(Advice)**:在特定连接点上执行的代码,也就是切面要执行的行为,例如前置通知、后置通知、异常通知等。 - **连接点(Join Point)**:程序执行中的某个特定点,如方法调用、异常处理等。 - **切入点...
Spring支持五种类型的Advice:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)**:连接点是在程序执行...
本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,包括前置通知、后置通知、返回通知和异常通知。 ### 前置通知(Before通知) 前置通知在目标方法执行之前运行。在Spring AOP中,我们使用`@Before`注解...
动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...
在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会将一系列的 `MethodInterceptor` 注册为 `Callback`,这些 `MethodInterceptor` 执行了 AOP 的逻辑。 在 Spring AOP 的自动代理...
在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...
Spring支持五种不同类型的的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)** 连接点是在程序...