Spring 请求和原型(prototype)范围?

标签 spring

下面是 Spring 中原型(prototype)和请求范围的定义。

原型(prototype) 将单个 bean 定义限定为任意数量的对象实例。

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

根据我的理解,在原型(prototype)范围的情况下,一些池将由核心容器维护。它将为该池中的 bean 实例提供服务。 在请求范围的情况下,将为每个 http 请求提供新的 bean。理解有偏差请指正?

如果上述陈述为真,那么如果 bean 保持某种状态,则不应将范围定义为原型(prototype),而应将其定义为原型(prototype) 按要求。对吗?

最佳答案

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

HttpRequest 范围

Mark mark1 = context.getBean("mark"); 
Mark mark2 = context.getBean("mark"); 
mark1 == mark2; //This will return true 

原型(prototype)范围

Mark mark1 = context.getBean("mark"); 
Mark mark2 = context.getBean("mark"); 
mark1 == mark2; //This will return false 

希望能为您解决问题。

关于Spring 请求和原型(prototype)范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480005/

相关文章:

java - 如何在 Spring 和 EJB 中使用相同的事务?

java - Spring-Security-Oauth2:默认登录成功url

java - 向类添加静态方法并委托(delegate)给现有方法

java - Spring @Order 注释未按正确顺序加载

java - HTTP 状态 404 -/EventTracker/greeting

spring - 实体的 RestTemplate 帖子

java - 获取所有重复项

java - Spring Controller - 记录请求和响应主体

java - Spring mvc 项目中的 org.springframework.beans.factory.CannotLoadBeanClassException

java - Spring安全错误ApplicationEventMulticaster未初始化