Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:在';重新定义应用程序上下文?_Java_Spring_Lazy Initialization - Fatal编程技术网

Java 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。。。有办法做到这一点吗?我基本上需要一个额

我正在从XML文件创建Spring应用程序上下文,如下所示:

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定义的方法很少,但无论如何,您可以在开始时只更改一次。为什么需要在调用代码后做出决策?