Spring 当bean范围更改为';原型&x27;
我在spring项目中定义了以下类 Triangle.java 下面的类计算三角形的面积 Area.java xml配置文件如下所示 spring.xml 现在 当我们将“三角形”bean范围设置为“单例”时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
<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);