Spring请求和原型范围?

M S*_*ach 16 spring

以下是spring中原型和请求范围的定义.

prototype将单个bean定义范围限定为任意数量的对象实例.

request将单个bean定义范围限定为单个HTTP请求的生命周期; 也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的.仅在Web感知Spring ApplicationContext的上下文中有效.

根据我的理解在原型范围的情况下,一些池将由核心容器维护.它将从该池中提供bean实例.在请求范围的情况下,将为每个http请求提供新bean.如果理解中存在某些相关性,请纠正我?

如果以上语句为真,那么如果bean保持某种状态,则不应将范围定义为原型,而应将其定义为请求.正确?

小智 124

我在网上找到的最好的一个

每次在ApplicationContext上调用getBean时,Prototype都会创建一个全新的实例.而对于Request,只为HttpRequest创建了一个实例.因此,在单个HttpRequest中,我可以在Application上调用两次getBean,并且只会有一个bean实例化,而同一个bean在同一个HttpRequest中作用于Prototype将获得2个不同的实例.

HttpRequest范围

Mark mark1 = context.getBean("mark"); 
Mark mark2 = context.getBean("mark"); 
mark1 == mark2; //This will return true 
Run Code Online (Sandbox Code Playgroud)

原型范围

Mark mark1 = context.getBean("mark"); 
Mark mark2 = context.getBean("mark"); 
mark1 == mark2; //This will return false 
Run Code Online (Sandbox Code Playgroud)

希望能为你解决这个问题.

  • 最好的解释! (3认同)

hvg*_*des 19

你走了 原型在此处的文档中描述为

"非单例,bean部署的原型范围导致每次发出对该特定bean的请求时都会创建一个新的bean实例."

您对请求范围bean的描述是准确的.

可能只是让电线与原型和单身相交.