首页 > 解决方案 > 多模块项目中的 Spring Boot AOP 不执行之前的建议

问题描述

我正在使用 Springs AOP 迈出第一步,并想从一个简单的日志记录建议开始。我的项目是一个多模块的maven项目,结构如下:

父项目
|__aop
|__data
|__web

web 模块在包 de.my.awsome.project.web.service 中有一个用户服务类,带有一个 saveNewUser 方法:

@Service
public class UserService {
...
    public MdUser saveNewUser(UserModel user) {
        MdUser newUser = this.save(user);
        createGroupMembership(user, newUser);
        return newUser;
    }
}

该方法按预期工作,因此不要打扰有关此的细节。

我现在所做的是在 aop 模块中创建以下类:

@Component
@Aspect
public class LoggingAspect {

    Logger logger = Logger.getLogger(getClass());

    @Before("execution(public * de.my.awsome.project.web.service.UserService.saveNewUser(..))")
    public void newUserLog(JoinPoint joinpoint) {
        logger.info(joinpoint.getSignature() + " with user " + joinpoint.getArgs()[0]);
}

}

我在 aop 模块的 pom 中添加了对 web 模块的依赖:

<dependency>
    <groupId>de.my.awsome.project</groupId>
    <artifactId>web</artifactId>
    <version>${project.version}</version>
</dependency>

我什至写了一个 ConfigurationClasse,尽管我认为 SpringBoot 不需要这样做:

@Configuration
@ComponentScan(basePackages="de.fraport.bvd.mobisl.aop")
public class AspectsConfig {

}

预期的结果是类似“saveNewUser with user xyz”的日志消息。但是永远不会调用日志记录方法。我错过了什么?

标签: mavenspring-bootspring-aopmulti-module

解决方案


@Configuration - 表示此文件包含一个方面的 Spring Bean 配置。

将 @Component 替换为 @Configuration 用于 LoggingAspect。


推荐阅读