原型范围不起作用

3 java spring

我已经在我的应用程序中创建了一个原型范围的bean,我正在使用setter将其注入另一个bean.但是当我在我的类中使用注入的bean时,它总是每次使用相同的实例而不是新的实例.

这是代码的快照

<bean name="prototypeScope" Class="A" scope="prototype">
</bean>

<bean Class="Consumer">
    <property name="a" ref="prototypeScope" />
</bean>

public class Consumer{
    privare A a;

    public void setA(A a){
        this.a = a;
    }


    public void consume(){

        a.doSomething();

    }
}
Run Code Online (Sandbox Code Playgroud)

问候

Ram*_*Ram 6

这是与原型范围豆相关的常见错误.

只有当我们从应用程序上下文请求bean的副本时,才会创建原型范围bean的新实例,而不是每次我们在实例上调用方法时.

在您的情况下,您使用后者的setter将原型范围的bean注入另一个bean,因此创建第二个类将创建原型范围bean的新实例.但它会使用相同的实例,只要它被你另一个mannualy替换.

如果在特定操作(如方法调用)期间需要原型范围bean的新实例,则必须从应用程序内容中获取该bean的新实例.

例如:

<bean name="prototypeScope" Class="A" scope="prototype">
</bean>

<bean Class="Consumer">
</bean>
Run Code Online (Sandbox Code Playgroud)

Java代码:

public class Consumer implements ApplicationContextAware{
    privare ApplicationContext context;

    public void setApplicationContext(ApplicationContext context){
        this.context = context;
    }


    public void consume(){

        A a = context.getBean("prototypeScope", A.class);

        a.doSomething();

    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,当调用consume方法时,会创建一个新的A类实例.