在我的 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>
abcUserExistsCheck 如下所示:
@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) {...}
}
这行得通。在将调用传递给 Klazz 之前,根据需要执行 UserExistCheck。问题是这是我让它工作的唯一方法。通过使用注释而不是上下文文件来完成这项工作似乎对我的小脑袋来说太过分了。那么......我究竟应该如何注释 UserExistsCheck 和 Klazz 中的方法?我还需要别的东西吗?另一个班级?上下文文件中还有内容吗?