Java Spring:在';重新定义应用程序上下文?
我正在从XML文件创建Spring应用程序上下文,如下所示:Java Spring:在';重新定义应用程序上下文?,java,spring,lazy-initialization,Java,Spring,Lazy Initialization,我正在从XML文件创建Spring应用程序上下文,如下所示: this.applicationContext=new ClassPathXmlApplicationContext(“classpath*:/spring配置/application context.xml”); 我知道有一个选项可以在XML文件本身中指定default lazy init,如本例所示: ... 但是,我想根据调用此代码时的上下文来决定是否使用默认的lazy init。。。有办法做到这一点吗?我基本上需要一个额
this.applicationContext=new ClassPathXmlApplicationContext(“classpath*:/spring配置/application context.xml”);
我知道有一个选项可以在XML文件本身中指定default lazy init
,如本例所示:
...
但是,我想根据调用此代码时的上下文来决定是否使用默认的lazy init。。。有办法做到这一点吗?我基本上需要一个额外的配置布尔值,可以传递给ClassPathXmlApplicationContext
构造函数,它会告诉它是否使用默认的lazy init。读取:
package com.example;
public class DemoBean {
public DemoBean(){
System.out.println("DemoBean is initialized on the request.");
}
}
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("application-context.xml");
context.getBean("demoBean");
}
}
ApplicationContext在启动期间急切地创建单例bean。这
实例类型是良好的,因为配置中的错误是
一开始就发现了。但是如果你
如果不希望在开始时预先实例化一个单例bean,那么您可以标记它
bean定义为正在初始化
注意:延迟初始化的单例bean只有在被请求时才会被实例化。
您可以通过两种方式实现bean的延迟初始化:
->在
级别:
<bean id="demoBean" class="com.example.DemoBean" lazy-init="true"/>
Main.java:
package com.example;
public class DemoBean {
public DemoBean(){
System.out.println("DemoBean is initialized on the request.");
}
}
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("application-context.xml");
context.getBean("demoBean");
}
}
输出:
DemoBean is initialized on the request.
您不能向上下文的构造函数传递任何额外的内容,因为它不允许附加参数。动态更改bean定义的方法很少,但无论如何,您可以在开始时只更改一次。为什么需要在调用代码后做出决策?