SpringAOP没有看到这个方法

nkkqxpd9  于 2021-07-22  发布在  Java
关注(0)|答案(1)|浏览(351)

在我的项目中,我有aspectservice类,用于记录所有控制器方法:

  1. @Component
  2. @SLFJ
  3. @Aspect
  4. public class AspectService {
  5. @Pointcut("@annotation(com.aleksandr0412.bookstore.annotations.Audit) && execution(public * *(..))")
  6. public void publicAspectAudit() {
  7. }
  8. @Around(value = "publicAspectAudit()")
  9. public Object aspect(ProceedingJoinPoint joinPoint) throws Throwable {
  10. ObjectMapper om = new ObjectMapper();
  11. AuditMessage auditMessage = new AuditMessage();
  12. UUID uuid = UUID.randomUUID();
  13. auditMessage.setUuid(uuid);
  14. auditMessage.setAuditCode(((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(Audit.class).value());
  15. auditMessage.setEventCode(EventCode.START);
  16. auditMessage.setTimeStart(LocalDateTime.now());
  17. auditMessage.setUsername("");
  18. Object[] args = Arrays.stream(joinPoint.getArgs())
  19. .filter(arg -> !(arg instanceof UriComponentsBuilder)).toArray();
  20. auditMessage.setParams(om.writeValueAsString(args));
  21. log.info(auditMessage.toString());
  22. //-----

我的项目有3个模块:第一个是审计和aspectservice,第二个和第三个是具有不同控制器的可执行模块。我的问题是,在一个模块中,带有@audit注解的public controller方法工作正常,但在另一个模块中,aspectservice看不到它们。
工作正确:

  1. @Audit(AuditCode.AUTHOR_CREATE)
  2. @Override
  3. public ResponseEntity<AuthorDto> createAuthor(AuthorDto authorDto, UriComponentsBuilder componentsBuilder) {
  4. log.info("createAuthor with {} - start ", authorDto);
  5. AuthorDto result = service.addAuthor(authorDto);
  6. URI uri = componentsBuilder.path("/api/author/" + result.getId()).buildAndExpand(result).toUri();
  7. log.info("createAuthor end with {}, with result {}", authorDto, result);
  8. return ResponseEntity.created(uri).body(result);
  9. }

不起作用:

  1. @Audit(AuditCode.CREATE_USER)
  2. @Override
  3. public ResponseEntity<UserDTO> createUser(
  4. UserDTO userDTO,
  5. UriComponentsBuilder componentsBuilder
  6. ) {
  7. log.info("createUser with {} - start ", userDTO);
  8. if (userDTO == null) {
  9. throw new EmptyException();
  10. }
  11. UserDTO result = userService.add(userDTO);
  12. URI uri = componentsBuilder.path("/api/user/" + result.getId()).buildAndExpand(result).toUri();
  13. log.info("createUser end with result {}", result);
  14. return ResponseEntity.created(uri).body(result);
  15. }

在第二个示例中,当我尝试调试它时,我不访问aspectservice类。我哪里出错了?

u0njafvf

u0njafvf1#

我将@componentscan和aspectservice包添加到第二个模块中。它解决了我的问题

相关问题