Я получил эту аннотацию и аспектно классAspectJ с Spring Security
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AroundHere {
}
@Aspect
@Component
public class SomeAspect {
@Around("@annotation(com.annotation.AroundHere)")
public Object redirectIfNotEditingStatus(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("hi");
return pjp.proceed();
}
}
Я хочу напечатать «привет» на некоторых методах, которая имеет @AroundHere
аннотацию. Он отлично работает на уровне обслуживания, но не работает над контультерами. Я подозреваю Spring Security, потому что он сканирует все компоненты контроллера.
Как я могу заставить их работать на контроллерах?
Возможно, контроллеры определены в определении веб-контекста, а ваши сервисы (и ваш аспект) определены в контексте приложения? – micha
Как сказал @micha, скорее всего, он не работает для вас, потому что 'aop: aspectj-autoproxy' определяется в одном контексте приложения, и у вас есть ваши контроллеры в другом контексте приложения. Как правило, 'BeanFactoryProcessors' (которые выполняют фактическую работу, когда' aop: aspectj-autoproxy' находится в контексте) действуют только на компоненты в контейнере, где они определены. Так, например, если у вас есть 'aspectj-autoproxy', определенный в контексте корневого приложения, он не будет действовать на компоненты, определенные в контексте * -servlet.xml. –
Другая причина может заключаться в том, что службы обычно реализуют интерфейс, в то время как контроллеры этого не делают. А Spring AOP нужен компонент, реализующий интерфейс. –