我是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
时会抛出编译时错误。
有人可以帮我吗?谢谢!