Spring在应用程序中,如何初始化spring容器后不要关闭,始终运行。

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

6 个解决方案

#1


为什么就没有高手出现呢。。。。坐等回答啊!

#2


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

#3


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

同意LS

#4


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

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

#5


这个跟spring的生命周期没关系吧。static声明的变量是整个aplication关闭之前都有效的哦。

我不知道你开始是怎么声明的static,又是怎么去调用的。

#6


在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初始化完成

#1


为什么就没有高手出现呢。。。。坐等回答啊!

#2


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

#3


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

同意LS

#4


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

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

#5


这个跟spring的生命周期没关系吧。static声明的变量是整个aplication关闭之前都有效的哦。

我不知道你开始是怎么声明的static,又是怎么去调用的。

#6


在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初始化完成