您的位置:首页 > 编程语言 > Java开发

servlet 使用spring管理bean

2015-07-23 22:51 507 查看
今天在项目中遇到一个问题,就是在servlet无法注入spring管理的对象。后来在网上查了下,原来是spring管理的bean和servlet不在一个上下文环境。导致注入失败。



那到底有没有办法解决这样的问题呢?我也查了下,还是有好多种方式的。但是个人觉得下面的一种方式可能更为优雅一点。

首先,创建一个AbstractServlet 抽象类,让你的所有servlet继承于此类。如下:

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.support.SpringBeanAutowiringSupport;

/**
 * Servlet implementation class AbstractServlet
 */

public class AbstractServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AbstractServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	public void init(ServletConfig config) throws ServletException {
		SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
				config.getServletContext());
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


接下来就是让你的servlet继承AbstractServlet就可以了,之后你就可以再的sevrvelt中使用@AutoWired注解了。

注意:此时只能使用@AutoWired注解,@Resource是无效的。因为是用这个来处理的。

SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,config.getServletContext());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: