Java 有人能帮我理解如何使用Spring创建原型实例吗?

Java 有人能帮我理解如何使用Spring创建原型实例吗?,java,spring,Java,Spring,如果bean是通过XML配置的,那么它的构造函数的输入参数总是相同的,所以即使我将范围声明为原型,类实例中的成员对于所有对象都是相同的?那么,它的原型是什么呢 例如,如果我有一个类,其构造函数采用整数参数: A(int i){} 如果我通过XMLBean配置它,参数I的值不会在那里被硬编码吗?或者每次需要实例化类时,是否有一种方法可以将不同的值传递给I?直接使用getBean时可以提供值。要获得更优雅的解决方案,请查看spring文档中的“方法注入” <bean id="beanA" c

如果bean是通过XML配置的,那么它的构造函数的输入参数总是相同的,所以即使我将范围声明为原型,类实例中的成员对于所有对象都是相同的?那么,它的原型是什么呢

例如,如果我有一个类,其构造函数采用整数参数:

A(int i){}

如果我通过XMLBean配置它,参数
I
的值不会在那里被硬编码吗?或者每次需要实例化类时,是否有一种方法可以将不同的值传递给
I

直接使用getBean时可以提供值。要获得更优雅的解决方案,请查看spring文档中的“方法注入”

<bean id="beanA" class="A" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="null"/>
</bean>

A bean = (A) applicationContext.getBean("beanA", new Object[]{someInteger});

一个bean=(A)applicationContext.getBean(“beanA”,新对象[]{someInteger});

直接使用getBean时可以提供值。要获得更优雅的解决方案,请查看spring文档中的“方法注入”

<bean id="beanA" class="A" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="null"/>
</bean>

A bean = (A) applicationContext.getBean("beanA", new Object[]{someInteger});

一个bean=(A)applicationContext.getBean(“beanA”,新对象[]{someInteger});

所有实例在创建之后都是相同的。但是如果它们是有状态的,那么经过一些操作之后它们就不一样了

当然,如果您的bean是无状态的,我认为将其作为原型没有任何好处


关于上一个问题,例如,使用SpringEL,您可以调用一个每次返回不同值的方法。这样,每个实例在创建后都是不同的。

所有实例在创建后都是相同的。但是如果它们是有状态的,那么经过一些操作之后它们就不一样了

当然,如果您的bean是无状态的,我认为将其作为原型没有任何好处


关于上一个问题,例如,使用SpringEL,您可以调用一个每次返回不同值的方法。这样,每个实例在创建后都是不同的。

您可以为同一类声明任意多个原型:

<bean id="beanNegative" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="-1"/>
</bean>

<bean id="beanPositive" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="1"/>
</bean>

<bean id="beanNeutral" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="0"/>
</bean>

只有value=“-1”、value=“1”、value=“0”和原型的名称更改

当然,从您拥有多个类实例的那一刻起,就不可能按类进行自动连接:您需要明确指定要将哪个原型实例注入到依赖bean中

还要注意的是,原型不同于单一实例,因为每次从spring获取bean时,它都是一个新实例,而单一实例将为应用程序中的所有其他bean提供相同的实例

致以最良好的祝愿,
Zied Hamdi-

您可以为同一类声明任意多个原型:

<bean id="beanNegative" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="-1"/>
</bean>

<bean id="beanPositive" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="1"/>
</bean>

<bean id="beanNeutral" class="MyBean" scope="prototype">
        <constructor-arg index="0" type="java.lang.Integer" value="0"/>
</bean>

只有value=“-1”、value=“1”、value=“0”和原型的名称更改

当然,从您拥有多个类实例的那一刻起,就不可能按类进行自动连接:您需要明确指定要将哪个原型实例注入到依赖bean中

还要注意的是,原型不同于单一实例,因为每次从spring获取bean时,它都是一个新实例,而单一实例将为应用程序中的所有其他bean提供相同的实例

致以最良好的祝愿,
Zied Hamdi-

那么拥有原型实例有什么用呢?当然有。只需将构造函数参数连接到。我不确定注释等价物是什么,在它成为一件事之前我离开了Javaland。那么拥有原型实例有什么用呢?当然有。只需将构造函数参数连接到。我不确定注释的等价物是什么,在这成为一件事之前,我离开了Javaland。