当前位置: 首页 >Java技术 > Spring AOP和Servlet使用问题

Spring AOP和Servlet使用问题

需求:

我们想使用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 {		...				retu true;	}}

2)在Dispatch-servlet.xml中声明作为拦截器的Bean:

	<mvc:interceptors>		<bean class="com.test.web.myInterceptor" />	</mvc:interceptors>



作者:中下游国外我
来源链接:https://blog.csdn.net/zxygww/article/details/48315423

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/java/113208.html

标签:SpringAOP
分享给朋友:

“Spring AOP和Servlet使用问题” 的相关文章