ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");来获得bean。
这样会不会很浪费资源,有没有一个好的方法,一次初始化spring后,整个应用程序未关闭前,不结束spring容器的生命 周期,可以多次获得bean。在应用程序关闭后,随之关闭Spring容器。
在线等回答。。。。
6 个解决方案
#1
为什么就没有高手出现呢。。。。坐等回答啊!
#2
public static ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
写进一个专门的类里。
以后直接用就行了。
写进一个专门的类里。
以后直接用就行了。
#3
同意LS
#4
我一开始就是这么做的,可是我初始化后,再去调用bean的时候就已经是空指针了,说明spring的生命周期结束了。。。。
#5
这个跟spring的生命周期没关系吧。static声明的变量是整个aplication关闭之前都有效的哦。
我不知道你开始是怎么声明的static,又是怎么去调用的。
我不知道你开始是怎么声明的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初始化完成
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
同意LS
#4
我一开始就是这么做的,可是我初始化后,再去调用bean的时候就已经是空指针了,说明spring的生命周期结束了。。。。
#5
这个跟spring的生命周期没关系吧。static声明的变量是整个aplication关闭之前都有效的哦。
我不知道你开始是怎么声明的static,又是怎么去调用的。
我不知道你开始是怎么声明的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初始化完成
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初始化完成