Я Следующий аспект класса:Spring AOP Аннотация не работает
@Component
@Aspect
public class LoggedRequestAspect {
private static final Logger LOG = LoggerFactory.getLogger(LoggedRequestAspect.class);
@Before("com.application.aspect.pointcut.LoggedRequestPointCut.LogRequest()")
public void logRequest(){
System.out.println("Method Executed!");
LOG.debug("Method Executed!");
}
}
А для класса аннотаций:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LoggedRequest {
}
И наконец Pointcut:
public class LoggedRequestPointCut {
@Pointcut("execution(@com.application.aspect.annotation.LoggedRequest * *(..))")
public void LogRequest(){}
}
Теперь наверняка, у меня есть аннотировал требуемый метод api в моем контроллере:
Как было предложено многими другими ответами на SO. Я добавил следующее к моей конфигурации пружины:
<context:annotation-config/>
...
<context:component-scan base-package="com.application.core"/>
...
<aop:aspectj-autoproxy />
Теперь все это не работает. Я имею в виду, что по моему API-вызову /login
требуемый совет не выполняется.
И ГДЕ Вы добавили ' '? Потому что если это в контексте вашего корневого приложения (т. Е. 'ContextLoaderListener'), это ничего не сделает для ваших контроллеров. Рядом с этим вы должны включить 'proxy-target-class =" true "' в ' ', а также заставить его работать для контроллеров. –
Попробуйте изменить от: '@Pointcut (исполнение (@ com.application.aspect.annotation.LoggedRequest * * (..))' к '@Pointcut (@annotation (com.application. aspect.annotation.LoggedRequest)) ' , а затем попытайтесь вызвать ваши аннотированные методы. – mlewandowski
У вас есть' spring-aop' и 'aspectjweaver' в вашем пути к классу? –