gpt4 book ai didi

java - 仅使用注释的 Spring AOP 拦截方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:03:23 27 4
gpt4 key购买 nike

在我的 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.*.*(..)) &amp;&amp; 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) {...}
}

这行得通。在将调用传递给 Klazz 之前,会根据需要执行 UserExistCheck。问题是这是我让它工作的唯一方法。通过使用注释而不是上下文文件来使它工作似乎对我的小脑袋来说太多了。那么...我究竟应该如何注释 UserExistsCheck 和 Klazz 中的方法?我还需要其他东西吗?另一个类(class)?上下文文件中还有内容吗?

最佳答案

您是否启用了基于注解的 AOP? documentation说你必须添加

<aop:aspectj-autoproxy/>

到你的 Spring 配置。然后你需要在你的 checkUser 方法前添加一个注解。看起来你需要 @Around 建议,如 here 所述.

@Aspect
public class UserExistsCheck {

@Around("execution(* a.b.c.d.*.*(..)) && args(a.b.c.d.RequestObject)")
public Object checkUser(ProceedingJoinPoint pjp) throws Throwable {

关于java - 仅使用注释的 Spring AOP 拦截方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com