使用AOP后Spring Boot 2应用无法启动问题求助
问题分析与解决方案
我一眼就发现你遇到的启动问题根源在AOP的切入点表达式上!
你当前的切入点execution(* com.murphys.lcm.controller.*(..))只会匹配com.murphys.lcm.controller包直接下的类,但你的控制器都在mvc和rest这两个子包里,这个表达式匹配不到目标控制器,反而会错误地尝试匹配Spring框架内部的一些bean,这就是导致启动时出现大量org.s...开头错误的原因。
正确的写法
把切入点表达式改成带两个点的形式,这样就能匹配controller包以及所有子包下的所有方法了:
@Aspect @Component public class LogActionAspect { private final Logger logger = LoggerFactory.getLogger(this.getClass()); // 两个点表示包含controller包下的所有子包 @Before("execution(* com.murphys.lcm.controller..*(..))") public void getAllAdvice(JoinPoint joinPoint){ // 这里可以添加日志逻辑,比如打印方法名、参数等 logger.info("调用方法:{},参数:{}", joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); } }
额外排查建议
如果修改后还是启动失败,可以检查这几点:
- 确认你的项目已经引入了Spring AOP依赖,比如Spring Boot项目要加
spring-boot-starter-aop依赖 - 确保
LogActionAspect所在的包被Spring的组件扫描覆盖到了 - 尽量避免切入点范围太广,精准匹配你需要的包,防止误匹配Spring内部bean
内容的提问来源于stack exchange,提问作者robert trudel
相关产品推荐
相关产品推荐

