在 Hibernate 实体中使用 aspectj

Using aspectj in Hibernate entity

我有这样的实体 class:

package tr.com.example.model.porting
...//omitting imports

    @Configurable
    @Data
    @Entity
    public class PortOut{

      public void handleRequest(Long portingId) {
          processRequest(portingId);
           ...
        }
     }

这里是我在不同 class 中用 @Aspect 和 @Component 注释的方面代码:

 @Around("execution(* tr.com.example..PortOut.handleRequest(..))")
    public void handlePortingProcessAdvice(ProceedingJoinPoint joinPoint) throws Throwable {

        joinPoint.proceed();
        log.debug(log.debug("[POM]:{} is executed with parameters:{}", joinPoint.toShortString(), joinPoint.getArgs()))
    }

通常,我的方面代码工作正常 对于其他 Spring 管理的 classes,例如使用 @服务,@Component注解。我正在使用 https://github.com/subes/invesdwin-instrument 作为织造剂,并且还使用 Lombok.

我尝试了 this link(以及其他 so 帖子)。但是由于我使用的是 Lombok,我无法使用 aspectj 编译器直接编译以编织 @Configurable classes,正如我发现的那样,它不适用于 Lombok。 https://groups.google.com/forum/#!topic/project-lombok/ZkLsTZVSgD4

简而言之,我想要的是使用 aspectj 来记录一些方法的参数,但我不能在任何 Hibernate 实体 class 中使用它,除此之外工作正常。如何让它在实体 classes 中工作?

Here 你找到了为什么 Lombok 和 AspectJ 不喜欢对方的原因。

什么是said to work though, is to delombok the Lombok-annotated source code and then normally compile the generated source code with the AspectJ compiler (e.g. via AspectJ Maven plugin, which is what I use all the time in Maven projects). Assuming you do use Maven, also the delombok step can be done with Lombok Maven plugin。如果您为各个插件分配正确的阶段,应该可以完全自动化构建过程。

免责声明:我一生从未使用过 Lombok,但对 AspectJ 和 Maven 略知一二。