Java 在一个bean中定义单例,并在另一个依赖bean中创建原型
我需要了解Spring在以下情况下的表现。假设我的application-context.xml中有两个bean 案例1: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
<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,引用singletonDepartment
bean。案例1所有内容都将是singleton,案例2,所有新用户都将共享Department.@M.Deinum,请审核我的答案好吗?我猜你对案例1的解决方案是不正确的,从用户的范围来看,只有一个部门,如果你开始访问bean factory并自己请求部门实例,你会得到新的部门实例,但问题并不清楚。因此,从用户的角度来看,如果您不请求新实例,那么基本上一切都是单例的。