Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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 在一个bean中定义单例,并在另一个依赖bean中创建原型_Java_Spring_Dependency Injection - Fatal编程技术网

Java 在一个bean中定义单例,并在另一个依赖bean中创建原型

Java 在一个bean中定义单例,并在另一个依赖bean中创建原型,java,spring,dependency-injection,Java,Spring,Dependency Injection,我需要了解Spring在以下情况下的表现。假设我的application-context.xml中有两个bean 案例1: <bean id="user" class="com.test.User" > <constructor-arg ref="department"/> </bean> <bean id="department" class="com.test.Department" scope="protoType"></bea

我需要了解Spring在以下情况下的表现。假设我的application-context.xml中有两个bean

案例1:

<bean id="user" class="com.test.User" >
    <constructor-arg ref="department"/>
</bean>
<bean id="department" class="com.test.Department" scope="protoType"></bean>
<bean id="user" class="com.test.User" scope="protoType">
    <constructor-arg ref="department"/>
</bean>

<bean id="department" class="com.test.Department"></bean>

案例2:

<bean id="user" class="com.test.User" >
    <constructor-arg ref="department"/>
</bean>
<bean id="department" class="com.test.Department" scope="protoType"></bean>
<bean id="user" class="com.test.User" scope="protoType">
    <constructor-arg ref="department"/>
</bean>

<bean id="department" class="com.test.Department"></bean>

第一种情况:

<bean id="user" class="com.test.User" >
    <constructor-arg ref="department"/>
</bean>
<bean id="department" class="com.test.Department" scope="protoType"></bean>
<bean id="user" class="com.test.User" scope="protoType">
    <constructor-arg ref="department"/>
</bean>

<bean id="department" class="com.test.Department"></bean>
User
bean将是单例的。在创建上下文时,它将获得
Department
bean的一个新实例。每次从应用程序上下文注入/访问
Department
bean时,都将创建
Department
的新实例。它将与之前注入
User
bean的代码不同

第二种情况:

<bean id="user" class="com.test.User" >
    <constructor-arg ref="department"/>
</bean>
<bean id="department" class="com.test.Department" scope="protoType"></bean>
<bean id="user" class="com.test.User" scope="protoType">
    <constructor-arg ref="department"/>
</bean>

<bean id="department" class="com.test.Department"></bean>

每次从上下文中注入/请求
用户
bean时,它将是一个新创建的bean,引用singleton
Department
bean。

案例1所有内容都将是singleton,案例2,所有新用户都将共享Department.@M.Deinum,请审核我的答案好吗?我猜你对案例1的解决方案是不正确的,从用户的范围来看,只有一个部门,如果你开始访问bean factory并自己请求部门实例,你会得到新的部门实例,但问题并不清楚。因此,从用户的角度来看,如果您不请求新实例,那么基本上一切都是单例的。