我想再应用程序中集成hibernate和spring框架,但是spring初始化的时候每次都是要使用:
   ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");来获得bean。
   这样会不会很浪费资源,有没有一个好的方法,一次初始化spring后,整个应用程序未关闭前,不结束spring容器的生命 周期,可以多次获得bean。在应用程序关闭后,随之关闭Spring容器。
   在线等回答。

解决方案 »

  1.   

    public static ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
    写进一个专门的类里。
    以后直接用就行了。
      

  2.   

    我一开始就是这么做的,可是我初始化后,再去调用bean的时候就已经是空指针了,说明spring的生命周期结束了。
      

  3.   

    这个跟spring的生命周期没关系吧。static声明的变量是整个aplication关闭之前都有效的哦。我不知道你开始是怎么声明的static,又是怎么去调用的。
      

  4.   

    在web开发中我是这么做的
    web.xml初始化spring容器时,spring容器会加载所以bean,执行依赖注入操作,这时候可以通过bean来获取ApplicationContext 对象
    使用ApplicationContextAware接口,新建一个java类,继承这个接口,配置好bean.xml文件
    public class MySpringContainer  implements ApplicationContextAware,InitializingBean{ private static ApplicationContext ctx;
    @Override
    public void setApplicationContext(ApplicationContext ctx)
    throws BeansException {
    //初始化ctx
    setCtx(ctx);
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    System.out.println("初始化SpringContainer...");
    }
    public static  <T> T getBean(String beanId, Class<T> clazz){
    if(beanId==null || "".equals(beanId)){
    return null;
    }
    return ctx.getBean(beanId,clazz);
    }
    public static ApplicationContext getCtx() {
    return ctx;
    }
    private static void setCtx(ApplicationContext ctx) {
    SpringContainer.ctx = ctx;
    }

    }
    这样就获取spring容器了,你可以随便进行操作
    工程不关闭,直接写程序SpringContainer.getCtx();也不用每次都初始化容器了
    我提个问题,怎么知道spring加载最后一个bean呢?就是何时知道spring初始化完成