Spring AOP和Servlet使用问题
来源:互联网 发布:淘宝快递面单什么意思 编辑:程序博客网 时间:2024/06/06 01:09
需求:
我们想使用AOP向Servlet方法中加入特定的功能,比如日志记录,权限管理等。
问题:
当使用Spring标准的AOP编程方法时,会发现这些切入的方法无法在Servlet中使用。(开始你也许会怀疑是否代码有问题)
原因:
Spring AOP的原理是通过在对象的容器(代理类)的特定位置植入指定方法的调用来实现的。它的首要条件是要使用Spring AOP的对象必须是运行在一个Spring 容器中的,对应于Spring的Bean,即要求该对象必须声明为一个Spring Bean,而Servlet并不是一个Spring的Bean,所以Spring AOP对Servlet中的方法无效。
解决方案:
1、在Servlet的方法中调用Spring Bean的方法,通过在该Spring Bean中植入切面来达到该功能;(验证可行)
2、使用Spring MVC的拦截器Interceptor来对Servlet的请求进行功能切入;(验证可行)
1) 定义作为拦截器Bean的Java类:
public class myInterceptor implements HandlerInterceptor {//完成后释放资源@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object arg2, Exception arg3)throws Exception {...}/*控制器执行完,生成视图前执行的动作,通过arg3参数下向模型中加入公共成员*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object arg2, ModelAndView arg3) throws Exception {...}/*返回true,表示该请求被接收,进入servlet处理 返回false,表示该请求被拦截,不会进入servlet处理 */@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object arg2) throws Exception {...return true;}}
2)在Dispatch-servlet.xml中声明作为拦截器的Bean:
<mvc:interceptors><bean class="com.test.web.myInterceptor" /></mvc:interceptors>
0 0
- Spring AOP和Servlet使用问题
- spring的Aop使用问题
- 使用Spring AOP 需要注意的问题
- Spring AOP 和@Autowired 的问题
- 使用SPRING AOP框架和EJB组件
- 使用SPRING AOP框架和EJB组件
- 使用Spring AOP和AspectJ编排工作流
- Spring学习09-- AOP简介和使用
- Spring基础知识和AOP使用注意
- Spring--AOP 详解和使用(一)
- Spring--AOP 详解和使用(二)
- spring的AOP个人理解和使用
- 【Spring】基于注解的Spring AOP的配置和使用
- 基于spring注解方式配置和使用spring AOP
- Spring AOP 事务问题
- spring aop版本问题
- spring aop 失效问题
- Spring AOP问题
- 源码:打印错误信息和调试信息
- Android获取当前连接wifi的信道
- Java多线程的那些事儿
- 面试题 23
- MFC下双击放大的问题
- Spring AOP和Servlet使用问题
- c#枚举遍历(转换)
- 【Usaco Oct08 Gold】奶牛串门(Pasture Walking)(LCA)
- 比较 KAZE 与 SIFT 的算法
- Android学习之NDK环境的配置
- 第三十四天Service、IntentService、Thread、AsyncTask
- 浅谈 easyui tabs 的href和content属性
- 计蒜客 第5题:矩阵翻转
- 数据结构学习之路-第三章:顺序栈