spring aop改变目标方法的返回值

本文详细介绍了一种基于AspectJ的请求拦截器切面编程实现,通过定义切点、前置通知、后置通知、环绕通知等,实现了对特定注解标记的方法进行拦截,展示了如何在方法调用前后执行自定义逻辑,以及如何改变方法的返回值。

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

package com.example.tuomin.interator;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 请求拦截器 切面编程
 * @author sanch
 *
 */
@Aspect // 表示该类是一个通知类
@Component //spring注解方式bean注入 交给spring管理
public class RequestInterceptor {
	private  final static Logger logger = Logger.getLogger(RequestInterceptor.class);
	
	//定义一个空方法 借用其注解抽取切点表达式 
	@Pointcut("execution (* com.example.tuomin.control.*.*(..)) && @annotation(com.example.tuomin.annotations.TuominAnn) ")
	public void point() {}
		
	@Before("point()")
	public void before(JoinPoint joinPoint) throws Exception{
			System.out.println("进入aop-----------------------");
	}
	@After("point()")
	public void after(JoinPoint joinPoint){
		for (int i = 0; i < joinPoint.getArgs().length; i++) {  
            System.out.println(joinPoint.getArgs()[i]);  
        }  
        System.out.println(joinPoint.getSignature().getName());  
          
        System.out.println("=====checkSecurity====");  

	}

	 @AfterReturning(returning="rvt", pointcut="@annotation(com.example.tuomin.annotations.TuominAnn)")
	 public Object AfterExec(JoinPoint joinPoint,Object rvt){
		 System.out.println(rvt);
		 return "---"+rvt;

	 }
	 
	 @Around("point()")
	 public Object around(ProceedingJoinPoint pjp) throws Throwable{
			System.out.println("beginning----"); 
			Object object = pjp.proceed();    //运行doSth(),返回值用一个Object类型来接收
			object = "Mission Two";   //改变返回值
		    System.out.println("ending----");
			return object;    
		}



}

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值