春季AOP在不同项目中不起作用

时间:2018-08-02 14:15:32

标签: aop aspectj spring-aop

我是Spring AOP和AspectJ的新手,但是它们可以提供的简单性让我想使用它们。

问题是:我有两个项目,一个是Spring Boot应用程序server,另一个是包含所有实用程序功能core的项目。我想在两个项目中都实现日志记录方面,这是我所做的:

服务器

@Aspect
@Component
public class MethodLoggingAspect {

    @Around("@annotation(logExecutionTime)")
    public Object methodLog(ProceedingJoinPoint joinPoint, LogExecutionTime logExecutionTime) throws Throwable {
        final Logger logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass());
        final long start = System.nanoTime();

        Object proceed = joinPoint.proceed();

        final long end = System.nanoTime();

        logger.info("method={}, millis={}", joinPoint.getSignature().toShortString(), TimeUnit.NANOSECONDS.toMillis(end - start));
        return proceed;
    }
}
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class BeanConfiguration {
}

核心

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

我在LogExecutionTime和应用程序core中都使用了注释server,它们是两个不同的jar,并且server具有依赖项core。我希望当我运行server时,该方面将在两个部分中都起作用,但事实是,只有server中的方法具有该方面。

我还尝试在core中定义方面,并使用AspectJ进行编译时编织。但是core中有不可变库,当我使用aspectj-maven-plugin时会抛出编译时错误。

有人可以帮我吗?谢谢!

0 个答案:

没有答案