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
相关产品推荐
相关产品推荐

