Spring AOP ANNOTATION 不起作用的问题

本文深入探讨了在Spring配置中使用AOP Annotation时遇到的问题,特别是当aspect缺少@Component标注导致无法正常加载的情况。通过示例代码解释了问题原因,并提供了正确的实现方式以确保AOP功能正常工作。

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

Spring AOP ANNOTATION 不起作用的问题

问题介绍

1 在Spring配置文件中定义了

<aop:aspectj-autoproxy/>


<context:component-scan base-package="demo">
		<context:include-filter type="annotation"
			expression="org.aspectj.lang.annotation.Aspect"/>
	</context:component-scan>


2 MyAspect.java 代码

package demo;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
public class MyAspect {
	@Around("execution(* demo.*.*(..))")
	public void m1(ProceedingJoinPoint jp) throws Throwable {
		System.out.println(jp.getThis().getClass().getName());
		System.out.println(jp.getTarget().getClass().getName());
		if(jp.getTarget().getClass() == HelloWorldB.class){
			System.out.println("HelloWorldB return");
		}else{
			System.out.println("HelloWorldA proceed");
			jp.proceed(jp.getArgs());
		}
	}
	
}

3 但是aspect就是不起作用
annotation有了 
自动发现bean有了 
启用aspectj有了
后来发现因为aspect缺少<span style="font-family: Arial, Helvetica, sans-serif;">@Component标注</span><pre name="code" class="java">导致spring没发现这个bean所以就不能自动化加载了
如果不用bean自动加载,就需要明确在配置文件中定义这个aspect

正确代码

package demo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class MyAspect {
	@Around("execution(* demo.*.*(..))")
	public void m1(ProceedingJoinPoint jp) throws Throwable {
		System.out.println(jp.getThis().getClass().getName());
		System.out.println(jp.getTarget().getClass().getName());
		if(jp.getTarget().getClass() == HelloWorldB.class){
			System.out.println("HelloWorldB return");
		}else{
			System.out.println("HelloWorldA proceed");
			jp.proceed(jp.getArgs());
		}
	}
	
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值