SpringBoot配置切面Aspect不生效原因

本文探讨了SpringBoot中切面Aspect配置不生效的原因,包括可能的jar包导入问题和启动类注解的误解。通过对Aspect切面类代码的分析,帮助读者理解并解决此类问题。
部署运行你感兴趣的模型镜像

  首先,要导入jar包:

<!-- SpringBoot 拦截器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

第二可以在启动类加上注解(不需要)

@EnableAspectJAutoProxy(proxyTargetClass = true)

Aspect切面类代码

@Pointcut(value = "execution(public * com.qqri.api.controller..*.*(..))")
    public void webLog(){}

    @Before(value = "webLog()")
    public void doBefore(JoinPoint joinPoint) {
        // 接收到请求,打印请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 打印请求内容
        log.info("URL : " + request.getRequestURL().toString());
        log.info("HTTP_METHOD : " + request.getMethod());
        log.info("IP : " + request.getRemoteAddr());
        log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        log.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
    }


    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) {
        // 处理完请求,返回内容
        log.info("RESPONSE : " + ret);
    }

 

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

### 验证 Aspect 切面是否被正确注入 在运行的 Spring Boot 应用中,可以通过多种方式验证 `@Aspect` 注解的切面类是否被正确注入并生效。 #### 1. 使用 `ApplicationContext` 获取切面 Bean 可以通过 `ApplicationContext` 检查切面类是否被注册为 Spring 容器中的 Bean。如果切面类被正确注册,可以通过 `getBean()` 方法获取其实例。 ```java @Autowired private ApplicationContext applicationContext; @Test public void testAspectBeanExists() { boolean containsAspect = applicationContext.containsBean("moduleAspect"); assertTrue(containsAspect); } ``` 该方式适用于验证切面类是否被 Spring 容器识别并注册为 Bean [^1]。 #### 2. 通过日志输出验证切面逻辑是否执行 在切面类的通知方法(如 `@Before`, `@After`)中添加日志输出,运行目标方法时观察日志是否按预期输出。 ```java @Before("execution(* com.example.service.*.*(..))") public void beforeServiceMethod(JoinPoint joinPoint) { System.out.println("Executing before method: " + joinPoint.getSignature().getName()); } ``` 当目标方法被调用时,如果控制台输出了预期的日志信息,则表明切面已被正确织入 [^1]。 #### 3. 使用 `AopProxyUtils` 获取代理对象 可以通过 `AopProxyUtils` 获取目标对象的代理类,从而验证目标对象是否被 AOP 代理。 ```java @Autowired private BusinessService businessService; @Test public void testAopProxy() { Object proxyTarget = AopProxyUtils.getSingletonTarget(businessService); assertNotNull(proxyTarget); } ``` 若 `proxyTarget` 不为 `null`,则表明目标对象已经被 Spring AOP 代理 [^1]。 #### 4. 使用 `@PointcutAdvisor` 验证切面逻辑 如果切面使用了 `PointcutAdvisor`,可以通过检查 `Advisor` 是否被注册到 `AdvisorRegistry` 来验证切面是否生效。 ```java @Autowired private AdvisorRegistry advisorRegistry; @Test public void testAdvisorRegistered() { boolean containsAdvisor = Arrays.stream(advisorRegistry.getAdvisors()) .anyMatch(advisor -> advisor instanceof DefaultPointcutAdvisor); assertTrue(containsAdvisor); } ``` 此方式适用于验证自定义的切面逻辑是否被 Spring AOP 框架识别并注册 [^2]。 #### 5. 单元测试验证切面行为 编写集成测试,调用被切面拦截的方法,并验证切面逻辑是否按预期执行。 ```java @SpringBootTest public class AspectIntegrationTest { @Autowired private BusinessService businessService; @Test public void testAspectExecution() { businessService.performAction(); // 应触发切面逻辑 } } ``` 如果测试执行时切面逻辑被正确织入,则表明切面已生效 。 --- ###
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值