java - Spring框架在页面刷新时相同的对象,如何避免它
问题描述
这可能是一个初学者的问题,并且与 java 如何为网站服务有关。我来自 PHP 背景,对于每个请求,以前的状态都会被清除。
为什么当我定义一个 bean 时,如下所示,页面刷新时返回相同的对象哈希?
@Bean
public BreadCrumbs breadCrumbs()
{
List<AssemblerInterface> assemblers = new ArrayList<AssemblerInterface>();
assemblers.add(new BlogPostAssembler());
return new BreadCrumbs(new RenderStrategy(), assemblers);
}
在我的控制器中:
System.out.println(breadCrumbs.hashCode());
在每个页面请求上,都会返回相同的哈希码:
817233364
817233364
817233364
817233364
817233364
817233364
817233364
817233364
817233364
817233364
817233364
并且 Breadcrumbs 组件的状态会累积(一遍又一遍地显示相同的项目)。问题是如何避免它?
解决方案
那是因为在 spring 中 bean 的默认范围是 Singleton,所以容器创建了该 bean 的单个实例,并且对该 bean 名称的所有请求都将返回相同的对象,该对象被缓存。如果您希望在每个请求上都有一个新实例,则需要制作范围原型
@Bean
@Scope("prototype")
public BreadCrumbs breadCrumbs()
{
List<AssemblerInterface> assemblers = new ArrayList<AssemblerInterface>();
assemblers.add(new BlogPostAssembler());
return new BreadCrumbs(new RenderStrategy(), assemblers);
}
希望能帮助到你。
推荐阅读
- hibernate - JPA中方法完成时如何更新数据库
- amazon-web-services - aws emr hive insert 语句给出错误为“辅助服务:mapreduce_shuffle 不存在”
- kotlin - 如何在 kotlin 中编写包含 mutex.withLock 的 getter 和 setter
- node.js - Node + vue js 用户离线/在线状态(服务器端)
- javascript - 单击按钮时,Ajax 不会中止
- excel - 获取运行时 1004:使用单元格时对象“_Worksheet”的方法“范围”失败
- c++ - 致命错误:无法打开文件'-c=':没有这样的文件或目录(SPP,phantompeakqualtools)
- java - 使用单个流数据实现多种功能的 Java 函数式编程
- javascript - 如果第一个方法在 Javascript 中返回 false,则不要调用第二个方法
- mongodb - 为什么 $lookup 中的“as”正在替换整个集合?