【发布时间】:2016-03-17 15:54:54
【问题描述】:
我有这个界面:
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 的 foo() 方法之前没有调用切面 doStuffBefore 方法。当我将@CustomAnnotation 放在FakeImpl 而不是FakeTemplate 上时,它确实有效,但我更喜欢将注释放在FakeTemplate 上,因为它位于单独的API 包中,并且我已经将其委托为我放置所有注释的地方。
我还想确保在实现FakeTemplate 的每个类上调用CustomAnnotation,而不记得将注释放在所有实现类本身上。
如果注解仅在接口类上,有什么方法可以调用通知?
【问题讨论】:
-
不是真的,@RahulSharma,它绝对是相似的,但我不想在方面指定接口。我希望能够在任何接口上抛出注释,并让注释所在的任何接口的所有实现类都运行该建议。我不想不断地向方面添加接口规范。
标签: java spring interface annotations spring-aop