gpt4 book ai didi

java - Spring AOP 切入点通过参数区分

转载 作者:行者123 更新时间:2023-12-02 03:37:01 25 4
gpt4 key购买 nike

我在同一个类中有两个具有相同返回类型的公共(public)方法,唯一不同的是它所采用的参数。我只想将切入点应用于其中一个。

这是该类的示例:

public class HahaService{

public MyObject sayHaha(User user){
//do something
}

public MyObject sayHaha(Long id, User user){
//do something
}
}

现在我想让切入点仅应用于第二个 sayHaha 方法,该方法采用两个参数:一个 Long id 和一个 User 用户.

我目前有一个@Pointcut

@Pointcut("execution(public MyObject com.abc.service.HahaService.sayHaha(..))")
private void hahaPointCut() {
}

此切入点应用于两个 sayHaha 方法。

有什么方法可以只在第二次完成吗?

最佳答案

是的,只需将切入点表达式限制为具有特定参数类型的方法即可。

去掉..并指定参数类型

@Pointcut("execution(public MyObject com.example.HahaService.sayHaha(Long, com.example.User))")

或者,如果您确实需要参数的值,则可以使用名称绑定(bind)来捕获它们。例如,您的切入点将声明为

@Pointcut("execution(public MyObject com.example.HahaService.sayHaha(..)) && args(id, user)")
private void hahaPointCut(Long id, User user) {
}

并且建议,例如@Before,将被声明为(重复名称)

@Before("hahaPointCut(id, user) ")
public void before(Long id, User user) {
/* execute advice */
}

现在Spring AOP可以通过切入点中的参数与args中使用的名称之间的匹配来确定参数的类型。然后它会匹配 @Before 中的内容并绑定(bind)到相应的调用参数。

此技术在 Passing parameters to advice 章节中进行了描述。 .

关于java - Spring AOP 切入点通过参数区分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37336428/

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