Spring AOP和Servlet使用问题

5 篇文章 0 订阅
2 篇文章 0 订阅

需求:

我们想使用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 {
	//完成后释放资源
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object arg2, Exception arg3)
			throws Exception {
		...
	}
	/*控制器执行完,生成视图前执行的动作,通过arg3参数下向模型中加入公共成员*/
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2, ModelAndView arg3) throws Exception {
		...
	}
	/*返回true,表示该请求被接收,进入servlet处理
	  返回false,表示该请求被拦截,不会进入servlet处理
	  */
	@Override
	public 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>



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值