web启动的时候使用Spring容器中的bean
java web项目中,我继承SerlvtContextListener写了一个listener,当web容器启动的时候就从数据库在加载数据进行一系列的初始化,但是我的listener种引用了dao组件,而dao组件是交给Spring容器管理的,这样做,但是启动的时候,报了“
空指针”错误,我想可能是dao组件没有初始化的问题,但是我确实又要这么做,哪位大侠给我一个好方法,如果是继承Spring自己的一个listener,同样也是出现这样的问题
------最佳解决方案--------------------可以把加载Spring文件的方法写在一个类里面.
然后在你的那个listener里面调用该类的方法去加载spring配置文件,
并找到该bean,实现注入.
public class AppUtil{
private static AppUtil instance;
private static ApplicationContext context;
public static ApplicationContext getInstance(){
if(null == instance){
instance = new AppUtil();
}
String [] names = {classpath:applicationContext.xml};
context = new ClassPathXmlApplicationContext(names);
}
public static void main(String [] args){
UserDao userDao = (UserDao)AppUtil.context.getBean("userDao");
userDao.getUserById();
}
}
------其他解决方案--------------------
就是这样 直接读取配置文件获取 对象就行了
------其他解决方案--------------------把
org.springframework.web.context.ContextLoaderListener
放到你的Listener前面,
然后从你的Listener中用“标准”的方式来获取bean可能会更好一些
ApplicationContext ctx =
WebApplicationContextUtils.
getWebApplicationContext(session.getServletContext());
ctx.getBean("dao");
------其他解决方案--------------------操作不当的话会有两次加载的
------其他解决方案--------------------
你有没有配置自动事物管理,最好把对应的配置贴出来看看.
------其他解决方案--------------------
我有点不明白的是,如果是Spring启动以后,我在类中引用一个dao,有getter、setter方法,Spring也是自动帮我们注入的啊,这个Spring也启动了,怎么不能自动帮我注入啊?
------其他解决方案--------------------
这个怎么说,可以说清楚点吗?
------其他解决方案------