如何在 Servlet 中每次调用服务方法之前使用 Spring AOP 到 运行 代码

How to use Spring AOP to run code before every call of service method in Servlet

我有一些通用代码必须注入到任何 servlet 的 service 方法中。

因此,我构建了一个母 servlet SuperController :

public class SuperController extends HttpServlet{
     private HttpServletRequest lastRequest ; 
     //........
     public void service(HttpServletRequest req,HttpServletResponse res){
          setLastRequest(req); // example of common code
     }
}

然后,所有其他 servlet 都从这个 servlet 扩展。

public GalleryServlet extends SuperController{

      public void service(HttpServletRequest req,HttpServletResponse res){
           //instead of running here the common code , use AOP. 
           // Then , the other code
      }

}

我想使用 AOP 执行通用代码(即:setLastRequest(req)),因为 super.service(req,res) 引发了 ERROR 405

com.ControllerAspect.java

@Before("* com.SuperController+.service(..)")
public void doStuffBeforeService(JoinPoint joinPoint) {
    // do stuff here
}

如何使用Spring AOP:

HTTP 405表示不支持HTTP请求方式e.g. GET 用于 POST 等。检查您的配置/日志以了解支持的方法和实际使用的方法。

回答你的其他问题-

  • 是的,切入点 * com.SuperController+.service(..) 应该在 com.SuperController class 层次结构中包含 service 方法。参见 here
  • 使用 joinPoint.getArgs() 访问 method arguments