之前只是很模糊的知道其意思,在request scope中,每个request创建一个新的bean,在session scope中,同一session中的bean都是一样的

但是不知道怎么用代码去验证它

今天可找到验证它的代码了

首先定义一个简单的类

import lombok.Getter;
import lombok.Setter; @Getter
@Setter
public class HelloMessageGenerator {
private String message; @Override
public String toString() {
return getClass().getSimpleName() + "@" + Integer.toHexString(hashCode());
}
}

然后定义一个配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;
import org.springframework.web.context.annotation.SessionScope; @Configuration
public class ScopesConfig {
@Bean
@RequestScope
public HelloMessageGenerator requestScopedBean() {
return new HelloMessageGenerator();
} @Bean
@SessionScope
public HelloMessageGenerator sessionScopedBean() {
return new HelloMessageGenerator();
}
}

最后定义个控制类

import com.google.common.collect.Maps;
import java.util.Map;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/scopes")
@Slf4j
public class ScopesController { @Resource(name = "requestScopedBean")
private HelloMessageGenerator requestScopedBean; @Resource(name = "sessionScopedBean")
private HelloMessageGenerator sessionScopedBean; @GetMapping("/request")
public Map<String, String> getRequestScopeMessage() {
Map<String, String> result = Maps.newLinkedHashMap();
result.put("message", requestScopedBean.getMessage());
result.put("requestScopedBean", requestScopedBean.toString());
requestScopedBean.setMessage("Good morning!");
return result;
} @GetMapping("/session")
public Map<String, String> getSessionScopeMessage() {
log.info("getSessionScopeMessage(), sessionScopedBean:{}", sessionScopedBean);
Map<String, String> result = Maps.newLinkedHashMap();
result.put("message", sessionScopedBean.getMessage());
result.put("sessionScopedBean", sessionScopedBean.toString());
sessionScopedBean.setMessage("Good morning!");
return result;
}
}
结果说明:
1. 对于请求:/scopes/request(request scope 请求地址),网页上的结果是:
对于任何一次请求,message为null,且requestScopedBean都不一致,所以是每个request都会重新创建一个bean
第一次请求:
{
message: null,
requestScopedBean: "HelloMessageGenerator@3ef0cae5"
}
之后的请求:
{
message: null,
requestScopedBean: "HelloMessageGenerator@c84a4f4"
} 2. 对于请求:/scopes/session(session scope 请求地址),网页上的结果始终是:
第一次请求,message为null,之后的每次请求message被置为Good morning!,并且sessionScopedBean固定为一个值,所以同一session下都使用着同一个bean
当重新换一个浏览器请求时,又会重复以上的操作
第一次请求:
{
message: null,
sessionScopedBean: "HelloMessageGenerator@f9f38d5"
}
之后的请求:
{
message: "Good morning!",
sessionScopedBean: "HelloMessageGenerator@f9f38d5"
}

spring-bean-scopes - baeldung

spring 组件@Scope(request,session)示例 - cnblogs

最新文章

  1. TimerToPdf
  2. 谈谈php里的DAO Model AR
  3. Inversion_树状数组***
  4. 【前端】String.prototype.match() 用法详解
  5. python数据类型之list
  6. 【转】各种字符串Hash函数比较
  7. Spring4.0学习笔记(7) —— 通过FactoryBean配置Bean
  8. oracle关键字(保留字)
  9. C++—this指针的用法
  10. 一种数据与逻辑分离的Python单元测试工具
  11. Java小问题
  12. entity framework 上下文对象跟踪相关
  13. Python赋值运算符
  14. 无后缀名伪静态路径在IIS7.0的网站提示 &quot;404 - File or directory not found&quot;
  15. Swift3翻天覆地的改变
  16. Leetcode题库——40.组合总和II
  17. python测试开发django-32.admin后台多对多关系ManyToManyField
  18. [JavaScript] 将字符串数组转化为整型数组
  19. 关于微信小程序的场景值
  20. Ubuntu命令行下安装、卸载、管理软件包的方法

热门文章

  1. [ C++ ] 勿在浮沙筑高台 —— 内存管理(18~31p) std::alloc
  2. linux网络编程-posix条件变量(40)
  3. redis基础二----操作List类型
  4. Java Agent(上)
  5. 彻底搞懂Redis主从复制原理及实战
  6. docx.opc.exceptions.PackageNotFoundError: Package not found at &#39;文件名.docx&#39; 问题解决
  7. 入门大数据---Hive的搭建
  8. vueX基础知识笔记
  9. Python抓取国家医疗费用数据:国家名、人均开销
  10. Android 用视频做页面背景