我有这个界面:
public interface FakeTemplate {
@CustomAnnotation
void foo() {
}
}
以及该接口的实现:
@Component
public FakeImpl implements FakeTemplate {
@Override
public void foo() {
//Do Stuff
}
}
而这方面:
@Aspect
@Component
public class CustomAspect {
@Before(value = "@annotation(com.fake.CustomAnnotation)")
public void doStuffBefore(JoinPoint joinPoint} {
}
}
我正在使用启用了AspectJ的spring使用:
@EnableAspectJAutoProxy(proxyTargetClass = true)
我的问题是在执行FakeImpl的
doStuffBefore
方法之前未调用方面foo()
方法。当我将@CustomAnnotation
放在FakeImpl
而不是FakeTemplate
上时,它确实起作用,但是我更喜欢将注释放在FakeTemplate
上,因为它在单独的API包中,并且我将其委托为我放置所有注释的地方。我还想确保在实现
CustomAnnotation
的每个类上调用FakeTemplate
,而不必记住在所有实现类本身上添加注释。如果注释仅在接口类上,有什么方法可以使建议被调用?
最佳答案
注释继承不适用于Java中的方法。
但是您可以使用其他切入点表达式,例如execution(public * FakeTemplate+.foo(..))