如何解决使用AOP替代@override
我第一次尝试AOP。我想对@Override表示法做AOP来写日志。它似乎几乎可以正常工作,但是:
- 我必须在每个类中导入自己的Override类。这正常吗?我认为它将神奇首先通过我的@Override装饰器,然后通过Java。
- 我有一个非常奇怪的行为,根据我首先调用的端点,它在之后一直保持工作状态,或者仅适用于该端点。说,我有/ a和/ b,如果我先调用/ b,它将显示我的日志,然后我将调用/ a,它将不显示任何内容,如果在此之后,我将调用/ b,则将显示日志。但是,如果我先调用/ a,它会工作,然后再调用/ b,它会工作,并且对所有这些对象都继续起作用。对我来说这没有意义。
这是我的OverrideInterceptor:
@Slf4j
public class OverrideInterceptor implements MethodInterceptor<Object,Object> {
@Override
public Object intercept(MethodInvocationContext<Object,Object> context) {
String prettyMethod = context.getDeclaringType().getSimpleName() + "." + context.getName();
log.debug("{} with params {}",prettyMethod,context.getParameterValueMap());
long start = System.nanoTime();
Object result = context.proceed();
long end = System.nanoTime() - start;
log.debug("Execution of " + prettyMethod + " took: " + (end/1000) + "ms.");
return result;
}
}
我的注释:
@Documented
@Retention(RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
@Around
@Type(OverrideInterceptor.class)
public @interface Override {
}
两个类都在软件包中:com.time.infrastructure.config软件包;
我在com.time.infrastructure.db,com.time.infrastructure.rest,com.time.application.repository等包中的软件包中使用了@Override注释。
解决方法
对于点1:内置的@Override
注释是普通的@interface
-它位于java.lang
包中。您在这里所做的是,您已经在包Override
中创建了一个名称为com.time.infrastructure.config
的自定义注释,它与java.lang.Override
无关。因此从某种意义上讲,这是“正常”的,但可能并没有按照您的想法做。不幸的是,您不能在Java中对注释进行子类型化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。