Spring 当bean范围更改为';原型&x27;

Spring 当bean范围更改为';原型&x27;,spring,Spring,我在spring项目中定义了以下类 Triangle.java 下面的类计算三角形的面积 Area.java xml配置文件如下所示 spring.xml 现在 当我们将“三角形”bean范围设置为“单例”时 <bean id="triangle" class="src.jayant.spring.Triangle" scope="singleton"> 但当我将范围更改为“原型”时 <bean id="triangle" class="src.jayant.spring.T

我在spring项目中定义了以下类

Triangle.java 下面的类计算三角形的面积

Area.java xml配置文件如下所示

spring.xml 现在

当我们将“三角形”bean范围设置为“单例”时

<bean id="triangle" class="src.jayant.spring.Triangle" scope="singleton">
但当我将范围更改为“原型”时

<bean id="triangle" class="src.jayant.spring.Triangle" scope="prototype">
为什么使用setter方法

triangle.setBreadth(40);
当bean作用域是原型时没有效果

谢谢


Jay

它确实有一个效果:它改变了你从上下文中得到的三角形的宽度


但是这个三角形与
区域
bean使用的三角形不同,因为您的三角形bean现在是一个原型,因此,根据原型范围的定义,每次向上下文请求三角形实例时,您都会得到一个新实例。

它确实有一个效果:它会更改您从上下文中获得的三角形的宽度


但是这个三角形与
区域
bean使用的三角形不同,因为您的三角形bean现在是一个原型,因此,根据原型范围的定义,每次向上下文请求一个三角形实例时,您都会得到一个新实例。

我所理解的是,三角形bean是由注入的,并且在区域中使用与在bean区域中使用“ref”引用的相同的bean。为什么会创建一个新的三角形bean?因为它的范围是“原型”。prototype作用域的全部要点是告诉Spring,每次从上下文请求bean或将bean注入另一个bean时,都会创建一个新实例。当Spring根据
设置区域bean的三角形时,会调用一次。当您调用getBean()时,它会被第二次调用。到目前为止,我所理解的是,三角形bean只被创建一次,因为getBean(“Triangle”)只调用了一次。你想说每次在任何地方使用新的Triangle bean时都会创建它吗?不,我的意思是我在前面的评论中所说的,以及我链接到的官方文档中所解释的。您是否看到过这样一幅大图:“创建了一个全新的bean实例……每次协作bean引用原型时,”,显示一段与您在代码中使用的XML类似的XML?我理解的是三角形bean是由注入的,在区域中使用的bean与在bean区域中使用“ref”引用的bean非常相同。为什么会创建一个新的三角形bean?因为它的范围是“原型”。prototype作用域的全部要点是告诉Spring,每次从上下文请求bean或将bean注入另一个bean时,都会创建一个新实例。当Spring根据
设置区域bean的三角形时,会调用一次。当您调用getBean()时,它会被第二次调用。到目前为止,我所理解的是,三角形bean只被创建一次,因为getBean(“Triangle”)只调用了一次。你想说每次在任何地方使用新的Triangle bean时都会创建它吗?不,我的意思是我在前面的评论中所说的,以及我链接到的官方文档中所解释的。您是否看到过这样一幅大图:“创建了一个全新的bean实例……每次协作bean引用原型时”,并显示了一段与您在代码中使用的XML相似的XML?
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;                                                                                           

public class AreaApp 
{
    public static void main(String args [])
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        Triangle triangle = (Triangle)context.getBean("triangle");
        Area area = (Area)context.getBean("area");

        System.out.println("Area of Triangle is : "+area.triArea());

        triangle.setBreadth(40);

        System.out.println("Area of Triangle is : "+area.triArea());
    }
} 
<bean id="triangle" class="src.jayant.spring.Triangle" scope="singleton">
Area of Triangle is : 200.0
Area of Triangle is : 400.0
<bean id="triangle" class="src.jayant.spring.Triangle" scope="prototype">
Area of Triangle is : 200.0
Area of Triangle is : 200.0

triangle.setBreadth(40);