Метод перехвата с Spring AOP с использованием только аннотаций
В моем файле контекста Spring есть что-то вроде этого:
<bean id="userCheck" class="a.b.c.UserExistsCheck"/>
<aop:config>
<aop:aspect ref="userCheck">
<aop:pointcut id="checkUser"
expression="execution(* a.b.c.d.*.*(..)) && args(a.b.c.d.RequestObject)"/>
<aop:around pointcut-ref="checkUser" method="checkUser"/>
</aop:aspect>
</aop:config>
a.b.c.UserExistsCheck выглядит так:
@Aspect
public class UserExistsCheck {
@Autowired
private UserInformation userInformation;
public Object checkUser(ProceedingJoinPoint pjp) throws Throwable {
int userId = ... //get it from the RequestObject passed as a parameter
if (userExists(userId)) {
return pjp.proceed();
} else {
return new ResponseObject("Invalid user);
}
}
И класс, который перехватывается с этим материалом, выглядит так:
public class Klazz {
public ResponseObject doSomething(RequestObject request) {...}
}
Это работает. UserExistCheck выполняется по желанию перед передачей вызова в Klazz. Проблема в том, что это единственный способ, с помощью которого я работал. Чтобы заставить это работать, используя аннотации вместо файла контекста, кажется, слишком много для моего маленького мозга. Итак ... как именно я должен аннотировать методы в UserExistsCheck и Klazz? И мне все еще нужно что-то еще? Еще один класс? Все еще что-то в файле контекста?