定义切点:
package com.maxjay.bank.advice.aspectj;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
/**
* 日志记录 前置增强
*
* @author Administrator
*
*/
// 将该类标识为一个切面
@Aspect
public class LoggerBeforeAdvisor {
/**
* 当被代理对象的方法执行前,此方法被执行
*
* @param method
* 目标类方法
* @param args
* 方法的参数
* @param obj
* 目标类实例
*/
// 定义切点和增强类型,将切点、增强类型及其横切逻辑柔和在了一起。注意此处的execution中*号后必须有空格,否则系统启动会异常。
@Before("execution(* validateUser(..)) && within(com.maxjay.bank.service.impl.*AdviceService)")
public void beforeValidate() throws Throwable {
System.out.println("日志记录开始,将要运行的方法为");
}
}
spring配置文件中添加如下代码:
<bean id="testAdviceService" class="com.maxjay.bank.service.impl.TestAdviceService" />
<!-- 使用AOP进行日志记录,定义增强 -->
<bean class="com.maxjay.bank.advice.aspectj.LoggerBeforeAdvisor" />
<!-- 自动代理创建器,自动将@Aspect注解切面类织入到目标bean中 -->
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
如果想象(一)中的增强那样调用代理对象方法中的参数和返回值,我们该怎样做的?
AspectJ也有实现这方面的功能,请看下面的代码:
package com.maxjay.bank.advice.aspectj;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import com.maxjay.bank.model.TSysUser;
/**
* 日志记录 后置增强
*
* @author Administrator
*
*/
@Aspect
public class LoggerAfterAdvice{
/**
* 当被代理对象的方法执行完后,此方法被执行
* AfterReturning注解表示该方法时后置增强,其参数value指定了匹配规则,用来判断哪些类中哪些方法需要执行该增强;returning则指定了
* 被代理对象的方法执行完成后其返回值用来作为afterReturning中的user参数传递进来。
*/
@AfterReturning(value="execution(* validateUser(..)) && within(com.maxjay.bank.service.impl.*AdviceService)", returning="user")
public void afterReturning(JoinPoint jp, TSysUser user) throws Throwable {
System.out.println("日志记录结束,刚刚运行完成的方法为"
+ jp.getTarget().getClass().getName() + "."
+ jp.getSignature().getName() + " 返回值为:" + user);
}
}
afterReturning中的参数jp是传递过来的连接点,其中包含了要代理的对象、方法及方法参数等信息。
spring配置可改为下面的这段:
<bean id="testAdviceService" class="com.maxjay.bank.service.impl.TestAdviceService" />
<!-- 使用AOP进行日志记录,定义增强 -->
<bean class="com.maxjay.bank.advice.aspectj.LoggerBeforeAdvisor" />
<bean class="com.maxjay.bank.advice.aspectj.LoggerAfterAdvice" />
<!-- 基于@AspectJ切面的schema驱动器,使用了该方法后可以将上面的自动代理创建器AnnotationAwareAspectJAutoProxyCreator从配置中去除 --> <aop:aspectj-autoproxy />
通过此文就基本了解了@AspectJ的使用方法了。
分享到:
相关推荐
`springAOP2`可能是一个包含具体示例代码的目录。`基于@AspectJ配置Spring AOP之一 - 飞扬部落编程仓库-专注编程,网站,专业技术.htm`和其关联的`_files`目录可能包含了一个详细的教程或演示如何配置和运行@AspectJ的...
同时,通过阅读源码,我们可以更深入地理解Spring如何处理切面和通知,以及@AspectJ注解的工作机制,这对于提升我们的编程技能和解决实际问题大有裨益。 在压缩包文件"spring-aop-aspectj"中,可能包含了关于Spring...
**Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过...理解和熟练运用Spring AOP及其@AspectJ注解是每个Spring开发者必备的技能之一。
在Spring的XML配置中,AOP通过 `<aop:config>` 和 `<aop:advisor>` 等标签来定义切面和通知。首先,我们需要定义一个切面类,包含切入点表达式和通知方法。然后,在XML配置文件中声明这个切面,关联切入点和通知。...
4. **启用注解驱动的AOP**: 在Spring配置中,使用`@EnableAspectJAutoProxy`注解开启对AspectJ注解的支持。 例如: ```java @Aspect @Component public class MyAspect { @Before("execution(* ...
如果你使用的是XML配置,可以添加`<aop:aspectj-autoproxy>`元素;如果是Java配置,使用`@EnableAspectJAutoProxy`注解。 5. **应用切面**:最后,将切面类作为bean注入到Spring容器中,Spring会自动处理切面的织入...
本篇文章将深入探讨如何利用Spring的@AspectJ注解来实现AOP,这是一个入门级别的例子,旨在帮助开发者理解并掌握这一关键特性。 首先,我们要明白什么是AOP。面向切面编程是一种编程范式,它允许程序员定义“切面”...
本篇内容将对Spring AOP中基于AspectJ注解的使用进行总结,并通过实际案例进行解析。 首先,让我们理解AspectJ注解在Spring AOP中的核心概念: 1. **@Aspect**: 这个注解用于定义一个类为切面,这个类将包含切点和...
通过上述介绍,我们可以看出Spring AOP不仅提供了丰富的AOP特性,还极大地方便了开发者的使用。它通过非侵入性和轻量级的设计理念,使得开发者能够轻松地将诸如日志记录、事务管理等功能添加到现有的系统中,从而...
<aop:aspectj-autoproxy /> ``` 这行配置会告诉 Spring 使用 AspectJ 的代理模式来处理切面。 最后,我们需要确保在运行时 weaving(编织)切面。有两种方式实现 weaving:编译时 weaving 和运行时 weaving。编译...
Spring Aop之AspectJ注解配置实现日志管理的方法 Spring Aop是基于AspectJ实现的面向切面编程(AOP),它提供了一个灵活的方式来实现日志管理。通过使用AspectJ注解,可以轻松地实现日志记录、性能监控、安全检查...
2. **配置AspectJ**:在Spring的配置文件中启用AspectJ自动代理,可以通过`<aop:aspectj-autoproxy>`标签来实现。 3. **定义切面**:创建一个Java类作为切面,该类需要使用`@Aspect`注解。在切面类中,我们可以定义...
在Spring的XML配置文件中,我们可以创建一个`<aop:config>`元素,并在其内部定义`<aop:advisor>`来创建Advisor。Advisor的`advice-ref`属性用于指定通知bean的ID,`pointcut-ref`属性用于指定切点bean的ID。 2. ...
通过以上介绍,我们可以看到Spring的注解AOP配置是如何让代码更简洁、更易于理解和维护的。结合实际的项目需求,我们可以灵活地使用这些注解来实现各种企业级功能,如日志、事务控制等,从而提高代码的复用性和模块...
在XML配置中,可以使用`<aop:aspectj-autoproxy>`标签;在Java配置中,可以使用`@EnableAspectJAutoProxy`注解。 通过这种方式,Spring AOP允许我们以声明式的方式管理横切关注点,使得代码更加清晰和模块化。在`...
1. **启用AOP代理**:在Spring配置文件中,通过<aop:aspectj-autoproxy/>元素启用基于注解的AOP。 ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...