Spring AOP使用配置介绍(四):基于@AspectJ注解的aop

本文介绍如何使用AspectJ进行前置和后置的日志记录增强,包括定义切点、使用@Before和@AfterReturning注解,并提供了Spring配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义切点:

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的使用方法了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值