解决servlet调用spring中bean的问题

来源:互联网 发布:051级驱逐舰知乎 编辑:程序博客网 时间:2024/04/30 11:46

一、问题说明

目前在做一个后台管理系统,涉及到了web server。在码代码的过程中,突然发现一个问题,即在servlet中调用在spring中已经初始化的bean时,总是返回NullPointer Exception的异常,即空指针异常。

二、解决方法

原文地址:http://blog.csdn.net/kalso4212h2o/article/details/7275342 顺便感谢一些博主,帮了我个大忙;

1.原理分析

其实我们使用spring的目的就是为了让spring为我们来提供一个已经被注入好的一个实例。而servlet是不同的,servlet是有生命周期的,而这个并不归属spring管理,而是由web容器管理的。那么当servlet刚刚创建的时候,spring可以为servlet注入,当你访问的时候,由于servlet是单实例多线程的,所以,servlet信息被重置,刚刚被注入的对象又为null了。

2.解决方法

其实只要我在获得servlet的时候,用从Spring获得,而不是由web容器获得就可以了。而解决这个方法的思路就是,我们使用一个代理的servlet,利用这个代理的servlet去调用我们的业务servlet(其中这个业务servlet是被配置为spring中的bean),这样就可以实现其他bean注入,然后使用代理servlet调用。

3.代码实现

service层的实现
使用注解的方式来定义bean,当然也可使用xml文件来定义
@Service("merBankeService")public class MerchantBankServiceImpl implements MerchantBankServiceI {private static final Logger logger = Logger.getLogger(MerchantBankServiceImpl.class);private BaseDaoI<Tmerchantbank> merchantBankDao;private BaseDaoI<Trecord> recordDao;public BaseDaoI<Trecord> getRecordDao() {return recordDao;}@Autowiredpublic void setRecordDao(BaseDaoI<Trecord> recordDao) {this.recordDao = recordDao;}public BaseDaoI<Tmerchantbank> getMerchantBankDao() {return merchantBankDao;}@Autowiredpublic void setMerchantBankDao(BaseDaoI<Tmerchantbank> merchantBankDao) {this.merchantBankDao = merchantBankDao;}


servlet的实现
业务逻辑的代码就不写了,只写如何解决在servlet中调用spring中的bean的代码了。
public void init() throws ServletException {super.init();ServletContext servletContext = this.getServletContext();WebApplicationContext wac = null;wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);this.setMerBankService((MerchantBankServiceI) wac.getBean("merBankeService"));//在service层中使用@service注解的bean }



最后不要忘了在web.xml文件中配置一下相应的servlet
  <servlet>    <servlet-name>OnlineTransactionServlet</servlet-name>    <servlet-class>crb.servlet.account.OnlineTransactionServlet</servlet-class> </servlet> <servlet-mapping>    <servlet-name>OnlineTransactionServlet</servlet-name>    <url-pattern>/account/OnlineTransactionServlet</url-pattern> </servlet-mapping>







原创粉丝点击