Bean的作用域和生命周期(上)

简介: Bean的作用域和生命周期(上)

🔎前置


引入 Lombok

  1. 引入 Lombok 相关依赖
  2. 下载 Lombok 插件

利用 Lombok 的注解可自动添加所需的方法

例如

  • @Getter 自动添加 getter 方法
  • @Setter 自动添加 setter 方法
  • @ToString 自动添加 toString 方法
  • @Data 包含上述的所有方法

引入 Lombok 相关依赖


复制如下代码至pom.xml

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.24</version>
     <scope>provided</scope>
 </dependency>

下载 Lombok 插件


如果未找到, 可能的原因是已经下载好了(点击 Installed 查看是否下载)

🔎Bean的6种作用域


什么是作用域?

举个栗子🌰

定义一个成员变量, 该变量的调用范围是整个类(该成员变量的作用域)

定义一个局部变量. 该变量的调用范围是在定义该局部变量的方法内(该局部变量的作用域)

Spring 容器在初始化 Bean 实例时, 同时会指定该实例的作用域

  • singleton, 单例作用域
  • prototype, 原型作用域
  • request, 请求作用域
  • session, 会话作用域
  • application, 全局作用域
  • websocket, HTTP WebSocket 作用域

(前4种较为常见)

Bean 的作用域是指 Bean 在整个 Spring 框架中的某种行为模式

(例如 singleton — 单例作用域, 表示 Bean 在整个 Spring 中只有一份, 是全局共享的, 类似于成员变量)

对Bean作用域的解释


定义 User 类

包含 2 个属性

age — 年龄

name — 名称

定义 UserBeans 类

User user = new User()

设置 user.age 为 18

设置 user.name 为 bibubibu

定义 UserController 类

利用属性注入获取 user

将 user 赋值给 u(User u = user)

设置 u.name = Homo

定义 UserAdviceController 类

利用属性注入获取 user

打印此时的 user

运行结果

结果分析🍂

对于 UserController 类, 利用属性注入获取 user

对于 UserAdviceController 类, 利用属性注入获取 user

分属于不同的类, 但为何在 UserController 类中设置 u.name = Homo, 却在 UserAdviceController 类中获取到的 user 为 Homo 而不是 bibubibu?

因为 Bean 的作用域为全局共享

Bean 默认的作用域为 singleton — 单例作用域(全局共享), 因此修改 u.name 时 user.name 也被一并修改

singleton — 单例作用域


描述🍭

该作用域下的 Bean 在 IOC 容器中只存在一个实例

即获取 Bean(ApplicationContext.getBean())与装配 Bean(@Autowired)都是针对同一个对象

(Bean 的默认作用域为 singleton — 单例作用域)

适用场景🍭

通常无状态的 Bean 使用该作用域

即不会对 Bean 进行修改(只读)

为什么 Spring 选择 singleton 作为 Bean 的默认作用域🍭

单例模式只在第一次加载时速度较慢

在后续使用时可直接使用, 无需等待

因此其性能最优

prototype — 原型作用域


prototype 也可以称为多例作用域(对比单例作用域)

描述🍭

每次对该作用域下的 Bean 的请求都会创建一个新的实例(深拷贝)

即获取 Bean(ApplicationContext.getBean())与装配 Bean(@Autowired)都是针对新的对象实例

适用场景🍭

通常有状态的 Bean 使用该作用域

即会对 Bean 进行修改

相关文章
|
2月前
|
前端开发 Java 开发者
Bean的生命周期和作用域
Bean的生命周期和作用域
|
2月前
|
XML Java 数据格式
Spring框架学习 -- Bean的生命周期和作用域
Spring框架学习 -- Bean的生命周期和作用域
26 2
|
2月前
|
存储 设计模式 Java
Bean 作用域和生命周期
Bean 作用域和生命周期
|
11月前
|
前端开发 Java C++
Bean的作用域
Bean 常见的 6 种作用域
|
12月前
|
Java 容器 Spring
Bean生命周期
Bean生命周期
|
2月前
|
Java 开发者 Spring
Bean 的生命周期了解么
Bean 的生命周期了解么
|
7月前
|
Java Spring 容器
bean的生命周期
bean的生命周期
35 0
|
9月前
|
Java 容器 Spring
bean的作用域和生命周期和后置处理器以及作用域对生命周期的影响~
bean的作用域和生命周期和后置处理器以及作用域对生命周期的影响~
|
11月前
|
存储 安全 Java
Bean 的作用域和生命周期
Bean 的作用域和生命周期
50 1
|
11月前
|
XML Java 数据格式
Bean 的生命周期
Bean 的生命周期介绍