在文章(一)中已经介绍了增强的使用,此篇介绍切面的配置方法。
创建静态普通方法名匹配的切面:
package com.maxjay.bank.advice;
import java.lang.reflect.Method;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor;
import com.maxjay.bank.service.UserService;
/**
* 静态普通方法名匹配切面定义
* @author Administrator
*
*/
public class ValidateUserAdvisor extends StaticMethodMatcherPointcutAdvisor {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 只对validateUser进行拦截
*/
public boolean matches(Method method, Class targetClass) {
// 此次可以使用正则表达式来匹配
return "validateUser".equals(method.getName());
}
public ClassFilter getClassFilter() {
return new ClassFilter() {
public boolean matches(Class clazz) {
return UserService.class.isAssignableFrom(clazz);
}
};
}
}
该类中的matches方法用来确定哪些方法需要执行增强中的内容;getClassFilter则确定哪些类需要被代理,这个方法在使用自动创建代理时会很有用。
在spring配置文件中配置切面:
<bean id="validateUserAdvisor" class="com.maxjay.bank.advice.ValidateUserAdvisor">
<property name="advice">
<ref bean="loggerBeforeAdvice" />
</property>
</bean>
其中loggerBeforeAdvice是(一)中已经定义过的增强。
配置代理类:
<!--
配置单个bean的代理,在使用时不能用原有bean的id要用AppContext.get("singleLoginProxy")从context中获取(见测试类LoggerAdviceTest)
-->
<bean id="singleLoginProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.maxjay.bank.service.UserService</value>
</property>
<property name="interceptorNames">
<list>
<value>validateUserAdvisor</value>
</list>
</property>
<property name="target">
<ref bean="userService" />
</property>
<!-- 设置是否直接代理类(默认为false):true即使用cglib生成代理类,此时target对象不可以是JDK动态代理过的bean;false则使用JDK动态代理 -->
<property name="proxyTargetClass">
<value>true</value>
</property>
</bean>
注意此处配置与(一)中只有interceptorNames换成了我们刚刚配置的那个切面。
此外也可以使用静态正则表达式方法匹配来创建切面,代码如下
<!-- 定义静态正则表达式方法名匹配切面 -->
<bean id="regexpAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="patterns">
<list>
<value>.*get.*</value>
</list>
</property>
<property name="advice">
<ref bean="loggerBeforeAdvice" />
</property>
</bean>
其中.*get.*是标准的正则表达式语言,它匹配那些名称种包含get的方法
通过上面的步骤我们就定义完了切面了。
分享到:
相关推荐
Spring AOP通过XML配置文件提供了灵活的方式来定义和管理切面、切入点和通知,使得我们可以轻松地在应用程序中实现横切关注点的解耦。了解和掌握Spring AOP的配置实现,有助于提升我们构建松散耦合、易于维护的系统...
在"day39-Spring 06-Spring的AOP:带有切点的切面"这个主题中,我们将深入探讨如何在Spring中实现带有切点的切面,以及它们如何与源码和工具结合使用。 首先,理解AOP的基本概念非常重要。AOP的核心是切面(Aspect...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...
- 定义切面:创建一个类作为切面,定义通知方法,并使用注解@Aspect来标识。 - 配置通知:使用@Before、@After、@AfterReturning、@AfterThrowing、@Around注解来指定通知的执行时机。 - 配置切入点:使用@...
在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...
通过上述步骤,我们成功地使用Spring AOP配置了一个切面,用于在`DukePerformer`的表演前后执行观众的特定行为。这不仅增强了代码的可读性和可维护性,还体现了面向切面编程的核心思想——将横切关注点从业务逻辑中...
Spring AOP支持AspectJ,可以通过引入AspectJ的库和配置,将AspectJ切面集成到Spring应用中。AspectJ提供了更丰富的语法,如`@Before`、`@After`、`@Around`等,使得切面的定义更加直观。 3. **注解驱动的切面** ...
2. **注解配置**:Spring 2.5引入了基于注解的AOP配置,可以在切面类上使用@Aspect注解,@Before、@After、@AfterReturning、@AfterThrowing和@Around定义通知,@Pointcut定义切点。例如: ```java @Aspect ...
- `ApplicationConfig`:Spring配置文件,启用AOP并配置切面。 - 测试类:用来验证AOP功能是否正确工作。 通过运行这个项目,你可以看到AOP如何在实际场景中工作,如何通过切面和通知来增强业务逻辑。 总的来说,...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
在使用Spring AOP时,我们可以通过XML配置或注解的方式来定义切面。例如,可以使用`@Aspect`注解定义一个切面类,`@Before`、`@After`等注解来声明通知,`@Pointcut`定义切点表达式。 在实际开发中,Spring AOP广泛...
如果希望使用XML配置,可以在Spring配置文件中定义<aop:aspect>元素来声明切面,以及<aop:before>、<aop:after>等子元素来定义通知。 Spring AOP的优势在于其灵活性和易于使用。通过切面,我们可以把关注点分离,...
JavaEE Spring AOP(面向切面编程)是企业级应用开发中的重要技术,它允许开发者在不修改原有代码的情况下,通过“切面”来插入新的功能或者改变已有行为。Spring框架提供了对AOP的强大支持,使得我们可以方便地实现...
Spring AOP 是基于 IOC 的 Bean 加载来实现的,本文主要介绍 Spring AOP 原理解析的切面实现过程。AOP 切面的实现是将切面类的所有切面方法根据使用的注解生成对应 Advice,并将 Advice 连同切入点匹配器和切面类等...
在实际开发中,你可以通过配置XML或使用注解来定义切面,以及通知的触发条件。例如,使用`@Aspect`注解定义切面类,使用`@Before`、`@After`等注解标记通知方法,使用`@Pointcut`定义切点表达式。 总的来说,Spring...
Spring AOP,即Spring的面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下对程序进行功能增强的技术。在Java应用程序中,AOP主要用于日志记录、性能统计、安全控制、事务管理等...
配置事务管理切面: 在 Spring AOP 中,事务管理切面是通过 `<aop:config>` 元素来配置的。该元素用于定义一个切面,并指定该切面所关心的点cuts。在上面的配置文件中,我们可以看到 `<aop:config>` 元素用于定义一...
- **XML配置**:在Spring的配置文件中,可以使用<aop:config>标签来定义切面,<aop:pointcut>定义切点,<aop:advisor>定义通知,<aop:aspect>将切点和通知关联起来。 - **注解配置**:Spring 2.5引入了基于注解的...