论坛首页 入门技术论坛

怎样在项目启动时得到Spring管理的对象

浏览 3272 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-04-01  
有个项目是用ssh框架的,所有的dao,service都交给spring管理,项目使用的也是openSessioninView这种方式来管理
hibernate的session.现在我想在项目一启动的时候加载数据库的东西,我是准备在一个servlet里面来调dao,service这些东西来操作数据库,可是好像这样不行,得spring管理的bean的时候总是报null,估计是spring还没有加载,这样的问题,应该怎么解决啊?我是把这个Servlet的加载设为1。项目一启动就加载这个Servlet了。
   发表时间:2008-04-01  
项目启动时要做一些操作的话,不要用servlet.servlet是处理请求用的.写一个listener吧.在web.xml里,spring的ContextLoaderListener后边,写上你的listener.

<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	<listener>
		<listener-class>
			com.my.web.SysListener
		</listener-class>
	</listener>


然后可以在listener中:

public class SysListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent se){
        WebApplicationContext wa =   WebApplicationContextUtils.getWebApplicationContextse.getServletContext());
        IXXXService xxxService = (IXXXService )wa.getBean("xxxService ");
        //Do something here...
    }
}
0 请登录后投票
   发表时间:2008-04-01  
谢谢yyjn12,我会先按你说的方法试一下。
Servlet是可以在项目启动时加载的
把启动级别改成正数
<load-on-startup>1</load-on-startup>
然后重写
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
}
在init()方法里面就可以写你准备让项目启动时执行的方法了。看样子是servlet在spring加载前执行了,所以得不到spring的注入 。
0 请登录后投票
   发表时间:2009-03-05  
SysListener  
yyjn12 写道

项目启动时要做一些操作的话,不要用servlet.servlet是处理请求用的.写一个listener吧.在web.xml里,spring的ContextLoaderListener后边,写上你的listener.


Xml代码

&lt;listener&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener-class&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.context.ContextLoaderListener &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener-class&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener&gt;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener-class&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.my.web.SysListener &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener-class&gt;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener&gt;&nbsp;&nbsp;&lt;listener&gt;
&lt;listener-class&gt;
org.springframework.web.context.ContextLoaderListener
&lt;/listener-class&gt;
&lt;/listener&gt;

&lt;listener&gt;
&lt;listener-class&gt;
com.my.web.SysListener
&lt;/listener-class&gt;
&lt;/listener&gt;然后可以在listener中:


Java代码

public&nbsp;class&nbsp;SysListener&nbsp;implements&nbsp;ServletContextListener{ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;contextInitialized(ServletContextEvent&nbsp;se){ &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebApplicationContext&nbsp;wa&nbsp;=&nbsp;&nbsp;&nbsp;WebApplicationContextUtils.getWebApplicationContextse.getServletContext()); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IXXXService&nbsp;xxxService&nbsp;=&nbsp;(IXXXService&nbsp;)wa.getBean("xxxService&nbsp;"); &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Do&nbsp;something&nbsp;here... &nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;
}&nbsp;&nbsp;public class SysListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent se){
        WebApplicationContext wa =   WebApplicationContextUtils.getWebApplicationContextse.getServletContext());
        IXXXService xxxService = (IXXXService )wa.getBean("xxxService ");
        //Do something here...
    }
}


你好,请问只能用编码的方式取得bean吗?我试过将SysListener交给spring来管理,并使用setter来注入service对象,但是web容器似乎会根据web.xml中的listener配置重新生成一个SysListener对象,生成的SysListener对象中的service为空。能否将listener也交给spring管理呢?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics