У меня есть этот интерфейс:Spring аспект вызов на аннотациях по методу интерфейса
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} {
}
}
I используя пружину с включенным AspectJ, используя: @EnableAspectJAutoProxy(proxyTargetClass = true)
Моя проблема заключается в том, что метод doStuffBefore
не вызывается перед выполнением метода foo()
FakeImpl. Это работает, когда я положил @CustomAnnotation
на FakeImpl
вместо FakeTemplate
, но я бы предпочел поместить аннотацию на FakeTemplate
, поскольку он находится в отдельном пакете API, и я как бы делегировал его как место, где я помещал все свои аннотации ,
Я также хотел бы гарантировать, что CustomAnnotation
вызывается для каждого класса, который реализует FakeTemplate
, не забывая помещать аннотацию на все классы реализации.
Есть ли способ получить консультацию, если аннотация предназначена только для класса интерфейса?
дубликата этого: http://stackoverflow.com/questions/2847640/spring-aop-pointcut-that-matches-annotation-on-interface –
Не очень , @RahulSharma, это определенно похоже, но я не хочу указывать интерфейс в этом аспекте. Я хочу, чтобы иметь возможность бросить аннотацию на любом интерфейсе и иметь все реализующие классы любого интерфейса, на котором находится аннотация, имеют этот совет. Я не хочу постоянно добавлять спецификации интерфейса в этот аспект. – philhan