解决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 }
<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>
- 解决servlet调用spring中bean的问题
- 解决servlet调用spring中bean的问题
- Servlet中调用Spring管理的Bean
- servlet中调用spring的bean
- 在Servlet中调用spring中定义的Bean
- Spring中bean的调用
- 解决Spring中singleton中注入prototype Bean的问题
- 解决spring-boot 中 bean无法注入的问题
- servlet 中获取 spring 管理的 bean
- Servlet中注入Spring的bean
- servlet中手动获取spring的bean
- servlet中获取spring管理的bean
- servlet 中获取 spring 管理的 bean
- 转--解决Spring中singleton的Bean依赖于prototype的Bean的问题
- 解决Spring中singleton的Bean依赖于prototype的Bean的问题
- 解决Spring中singleton的Bean依赖于prototype的Bean的问题
- 在 Linstener 中 调用 spring 的 bean
- Activiti的servicetask 调用Spring中Bean
- struts基本流程
- java中普通变量、静态变量、静态代码块初始化的顺序辨析
- xcode4.5 如何找到以前的iphone模拟器
- iPhone/iOS Core Animation开发总结(CALayer) 分类: iphone开发总结
- 【转】MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文(整理)
- 解决servlet调用spring中bean的问题
- java String byte 16
- 使用PHP程序header location 进行跳转的注意的一个细节!
- AppleScript 脚本让 Mac 唱生日快乐歌
- opengl toturial 2, "Impossible to open SimpleVertexShader.vertexshader"
- PHP文件操作函数
- PreparedStatement和Statement具体区别
- windows phone 应用程序如何获得手机的IMEI码
- GCC -L-l -D -I 参数的用法