【问题标题】:How to use Spring AOP to run code before every call of service method in Servlet如何在Servlet中每次调用服务方法之前使用Spring AOP运行代码
【发布时间】:2015-06-11 07:27:27
【问题描述】:

我有一些通用代码必须注入到任何 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:

  • 这个切入点* com.SuperController+.service(..) 是否包含所有类中的service 方法,继承自com.SuperController

  • 如何访问doStuffBeforeService 中服务方法的参数(req & res)?

【问题讨论】:

    标签: servlets spring-aop


    【解决方案1】:

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

    回答您的其他问题-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多