You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring中aop:aspectj-autoproxy配置异常问题求助

解决Spring AOP中aop:aspectj-autoproxy导致的BeanCreationException问题

嘿,我帮你揪出问题根源啦!你碰到的BeanCreationException本质是切点表达式写错了,导致AspectJ没法正确解析你要切入的目标方法。

错误原因分析

你的Logger类里的@Before注解表达式是这样的:

@Before("execution(* schema2.manager.*(..))")

这里的写法有问题——AspectJ会把schema2.manager当成一个类型名(类/接口),而不是包名。但实际上schema2.manager是你的目标类所在的包,AspectJ找不到名为schema2.manager的类型,就抛出了invalidAbsoluteTypeName的警告,进而导致Bean初始化失败。

解决方案:修正切点表达式

你需要把切点表达式改成匹配包下所有类的所有方法,有两种灵活的写法可选:

写法1:匹配当前包下所有类的所有方法

@Before("execution(* schema2.manager.*.*(..))")

这里的schema2.manager.*表示包下的所有类,后面的.*(..)表示类中的所有方法。

写法2:匹配当前包及其子包下所有类的所有方法(更适合扩展)

@Before("execution(* schema2.manager..*(..))")

..符号表示包含当前包和所有子包,后续如果新增子包也能自动适配。

修正后的完整Logger类

@Aspect
@Component
public class Logger{
    @Before("execution(* schema2.manager..*(..))")
    public void before(JoinPoint joinPoint){
        System.out.println("The Method: " + joinPoint.getSignature().getName());
    }
}

其他配置确认

你的其他配置都是没问题的:

  • <context:component-scan base-package="schema2.*" />已经覆盖了所有需要扫描的类
  • Logger类同时添加了@Aspect和@Component注解,能被Spring识别为切面Bean
  • <aop:aspectj-autoproxy />配置正确,用来启用AspectJ自动代理

修正切点表达式后,重新启动应用,aop:aspectj-autoproxy就能正常工作,你的@Before切面日志也会在目标方法执行前正常打印啦!

内容的提问来源于stack exchange,提问作者injoker1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:21:52