为AOP代理指定通知时,将增强目标类/代理接口里声明的所有方法。但是大多数情况下,你只想增强部分方法。此时可以使用切入点匹配方法来解决这个问题。
切入点(pointcut)是另一个核心的AOP概念,它通常以表达式的形式出现,能够匹配特定的程序执行点来通知应用。在Spring AOP里,使用切入点类切入点声明为Spring Bean。
<bean id="arithmeticCalculator" class="org.mahz.easyaop.calculator.impl.ArithmeticCalculatorImpl" /> <bean id="methodNameAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> <property name="mappedNames"> <list> <value>add</value> <value>sub</value> </list> </property> <property name="advice" ref="logginAroundAdvice" /> </bean> <bean id="logginAroundAdvice" class="org.mahz.easyaop.calculator.aop.LoggingAroundAdvice" /> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*Calculator</value> </list> </property> <property name="interceptorNames"> <list> <value>methodNameAdvisor</value> </list> </property> </bean>
执行结果:
========================================== ============ Test add Method ============= ========================================== The method add()begin with [4.0, 0.0] 4.0 + 0.0 = 4.0 The Method add() ends with 4.0 ========================================== ============ Test sub Method ============= ========================================== The method sub()begin with [4.0, 0.0] 4.0 - 0.0 = 4.0 The Method sub() ends with 4.0 4.0 * 0.0 = 0.0
相关推荐
Advice与切入点关联,当切入点匹配到的连接点被执行时,Advice就会运行。 例如,切入点表达式`execution(* EmployeeManager.getEmployeeById(...))`表示匹配所有在`EmployeeManager`接口中名为`getEmployeeById`的...
在SLT-Spring-AOP这个项目中,你可以找到具体的实现示例,包括如何定义切面、通知和切入点表达式,以及如何在业务代码中应用这些概念。通过对该项目的深入学习,你将能够更好地理解和掌握Spring AOP的实战应用。
6. **JoinPoint 和 Signature**: JoinPoint是切入点的实际实例,包含了被拦截的方法信息。Signature是JoinPoint的一部分,提供了方法签名的访问。 7. **@Around**: 最强大的通知类型,允许完全控制方法调用的生命...
在具体实现时,我们需要创建一个包含通知的方法的切面类,然后定义切入点表达式。如果使用注解,可以直接在切面类的方法上使用`@Pointcut`定义切入点。然后,将通知与切入点关联,例如,通过在通知方法上添加`@...
在Spring AOP(面向切面编程)中,我们可以通过注解配置来实现对目标方法的增强,例如前置通知、后置通知、环绕通知和异常通知。这些通知在特定的时机执行,提供了灵活的代码逻辑插入点。下面我们将详细探讨如何在...
Spring AOP支持两种主要的通知类型:方法前(Before)、方法后(After)以及环绕通知(Around)。这些通知可以通过在方法上添加特定的注解来实现,例如`@Before`、`@After`和`@Around`。 1. `@Before`注解:在目标...
2. **XML配置的AOP**:在传统的Spring配置中,我们需要在`<aop:config>`元素内定义切面、切入点和通知。虽然相比注解方式繁琐,但在某些情况下更具有灵活性。 压缩包中的`SpringAOPTest`可能包含了一个Spring AOP的...
3. **基于XML配置的AOP**:在Spring的配置文件中,可以通过`<aop:config>`、`<aop:advisor>`、`<aop:pointcut>`等标签定义切面、通知和切入点。 ### 三、Spring AOP实战 1. **经典代理模式**:通过JDK动态代理或...
4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...
在Spring中,我们可以通过XML配置文件来定义切面、切入点和通知。以下是一个基本的XML配置示例: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
2. 当遇到一个切入点匹配的连接点时,Spring会根据通知类型调用相应的`Advice`。例如,对于`@Before`通知,Spring会调用`MethodBeforeAdvice`接口的方法;对于`@Around`通知,Spring会调用`ProceedingJoinPoint`的`...
AOP的核心概念是切面、通知、连接点、切入点和织入。在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于...
4. **切入点表达式(Pointcut Expression)**:这是定义切点的语法,使用了AspectJ的表达式语言,可以精确地定位到需要应用通知的代码位置。 5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理...
2. **XML配置驱动**:在Spring配置文件中定义切面、通知和切入点表达式。 **Spring AOP示例** 以入门级的`advice`为例,我们可能有一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect ...
3. **通知方法**:如`logBefore()`,这个方法会被`@Before`注解,将在匹配的切入点的方法执行前运行。 4. **配置类**:如果使用Java配置,可能有一个`AppConfig`类,其中使用`@EnableAspectJAutoProxy`注解来启用...
在使用Spring AOP时,我们还需要了解连接点(Join Point)、切入点(Pointcut)和切面(Aspect)的概念。连接点是程序执行的特定点,如方法的调用。切入点是匹配连接点的表达式,定义了通知将应用到哪些连接点。切面...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
- 使用AOP:Spring会自动为匹配的切点创建代理,并在合适的时候执行通知。 6. **实际应用**: 在SSH(Struts2 + Spring + Hibernate)架构中,Spring AOP常用于事务管理。当一个业务操作涉及多个数据库操作时,...
在上面的代码中,`@Around`注解定义了一个环绕通知,`@annotation(performanceMonitor)`是切入点表达式,意味着在所有带有`@PerformanceMonitor`注解的方法上执行此通知。`joinPoint.proceed()`是执行目标方法,而`...