gpt4 book ai didi

java - Aspectj 切入点表达式不适用于单个类中的一种方法,但适用于另一种方法

转载 作者:行者123 更新时间:2023-11-30 06:41:05 25 4
gpt4 key购买 nike

我在 Controller 中编写了以下代码。

对于这个 controllerMethod 方法,aspectj Pointcut 表达式工作正常,但对于 executeService 方法,Aspect 不起作用。

@RequestMapping(value = "URL", method = RequestMethod.POST)
public ModelAndView controllerMethod(@ModelAttribute ModelAttribute reqModel, HttpServletRequest req, HttpServletResponse res) {

try {
response = executeService(param1, param2);

} catch (Exception e) {

}

}
private ResponseObject executeService(String param1, String param2){
//Code....
}

我已经写了如下方面。

@Before("execution(* com.*.*.Controller.executeService(..))")
public void logBefore(JoinPoint joinPoint) {
logger.info("Before aspect: " + joinPoint.getSignature().getName());
}

您能告诉我问题出在哪里吗?我需要在调用 executeService 方法之前执行方面。

最佳答案

由于AOP不拦截内部调用,所以可以添加一个selfcontroller字段,通过self.method(...)调用内部方法。代码如下:

@Controller
public class ExampleController{

@Autowired
private ExampleController self;

@RequestMapping(value = "URL", method = RequestMethod.POST)
public ModelAndView controllerMethod(@ModelAttribute ModelAttribute reqModel, HttpServletRequest req, HttpServletResponse res) {

try {
response = self.executeService(param1, param2);

} catch (Exception e) {

}

}
public ResponseObject executeService(String param1, String param2){
//Code....
}
}

关于java - Aspectj 切入点表达式不适用于单个类中的一种方法,但适用于另一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363517/

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