maven - 多模块项目中的 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”的日志消息。但是永远不会调用日志记录方法。我错过了什么?
解决方案
@Configuration - 表示此文件包含一个方面的 Spring Bean 配置。
将 @Component 替换为 @Configuration 用于 LoggingAspect。
推荐阅读
- c++ - 内存泄漏。如何正确使用删除?BN_bn2hex _CrtIsValidHeapPointer(块)
- reactjs - 有没有办法可以从包装的组件更改父状态
- google-apps-script - 触发 Gmail 的报告网络钓鱼功能
- r - 在大型数据集上更改窗口大小的滚动平均值
- c# - 如何通过 IEnumerable 使用 TableQuery 进行查询?
- asp.net-mvc - 使用迁移将表添加到数据库
- javascript - 只克隆一个字段,每次点击追加一次
- python - Python:在整个 Excel 表中查找值/数据
- sharepoint - 在本地 TFS 中存储需求/规范文档
- python - 如何在 Django 2 模板中生成绝对 URL