如何在 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:
这个切入点 * com.SuperController+.service(..)
是否包含 service
所有 类 继承自 com.SuperController
的方法。
如何访问 doStuffBeforeService
中服务方法的参数 (req & res )?
HTTP 405表示不支持HTTP请求方式e.g. GET 用于 POST 等。检查您的配置/日志以了解支持的方法和实际使用的方法。
回答你的其他问题-
- 是的,切入点
* com.SuperController+.service(..)
应该在 com.SuperController
class 层次结构中包含 service
方法。参见 here。
- 使用
joinPoint.getArgs()
访问 method arguments。
我有一些通用代码必须注入到任何 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 )?
HTTP 405表示不支持HTTP请求方式e.g. GET 用于 POST 等。检查您的配置/日志以了解支持的方法和实际使用的方法。
回答你的其他问题-
- 是的,切入点
* com.SuperController+.service(..)
应该在com.SuperController
class 层次结构中包含service
方法。参见 here。 - 使用
joinPoint.getArgs()
访问 method arguments。