1.6 Spring Bean

简介: 在Spring应用中,Spring IoC容器可以创建、装配和配置应用组件对象,这里的组件对象称为Bean(Bean是注册到Spring容器中的Java类,任何一个Java类都可以是一个Bean)。

在Spring应用中,Spring IoC容器可以创建、装配和配置应用组件对象,这里的组件对象称为Bean(Bean是注册到Spring容器中的Java类,任何一个Java类都可以是一个Bean)。

1. Bean的实例化

在面向对象编程中,如果使用某个对象,需要事先实例化该对象。同样,在Spring框架中,想使用Spring容器中的Bean,也需要实例化Bean。

Spring框架实例化Bean有三种方式:构造方法实例化、静态工厂实例化和实例工厂实例化。其中,最常用的实例方法是构造方法实例化。

2. Bean的实例化案例

分别使用构造方法、静态工厂和实例工厂实例化Bean。

案例实现详见链接:案例05 Bean的实例化案例

3. Bean的作用域

Spring容器创建一个Bean实例时,还可以为该Bean指定作用域,Bean的作用域是指实例的有效范围。

Spring容器为Bean指定了多种作用域,具体如下表所示:

作用域名称

描述

singleton

单例模式,在单例模式下,Spring 容器中只会存在一个共享的Bean实例,所有对Bean的请求,只要请求的id(或name)与Bean的定义相匹配,会返回Bean的同一个实例。

prototype

原型模式,每次从容器中请求Bean时,都会产生一个新的实例。

request

在一次HTTP请求中容器将返回一个Bean实例,不同的HTTP请求返回不同的Bean实例。仅在Web Spring应用程序上下文中使用。

session

在一个HTTP Session中,容器将返回同一个Bean实例。仅在Web Spring应用程序上下文中使用。

application

为每个ServletContext对象创建一个实例,即同一个应用共享一个Bean实例。仅在Web Spring应用程序上下文中使用。

websocket

为每个WebSocket对象创建一个Bean实例。仅在Web Spring应用程序上下文中使用。

其中,singleton和prototype是两种最为常见的作用域。

    • singleton作用域

    singleton单例模式,是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器只为Bean创建一个实例,该实例可以重复使用。

    Spring容器管理着Bean的声明周期,包括Bean的创建、初始化、销毁。因为创建和销毁Bean实例会带来一定的系统开销,所以singleton作用域可以避免反复创建和销毁实例造成的资源消耗。

      • prototype作用域

      prototype原型模式,每次从容器中请求Bean时,都会产生一个新的实例,Spring容器只负责创建Bean实例而不再管理其生命周期。

      4. Bean的作用域案例

      分别使用singleton和prototype作用域创建Bean实例,比较singleton和prototype作用域的区别。

      案例实现详见链接:案例06 Bean的作用域案例

      5. Bean的生命周期

      Bean的生命周期是指Bean实例被创建、初始化和销毁的过程。在Bean的两种作用域singleton和prototype中,Spring容器对Bean的生命周期的管理是不同的。

      在singleton作用域中,Spring容器可以管理Bean的生命周期,控制着Bean的创建、初始化和销毁。在prototype作用域中,Spring容器只负责创建Bean实例,不会管理其生命周期。

      在Bean的生命周期中,有两个时间节点尤为重要,这两个时间节点分别是Bean实例初始化后和Bean实例销毁前,在这两个时间节点通常需要完成一些指定操作。因此,常常需要对这两个节点进行监控。

      目录
      相关文章
      |
      6天前
      |
      Java 应用服务中间件 Spring
      Spring系列文章:Bean的作⽤域
      Spring系列文章:Bean的作⽤域
      |
      6天前
      |
      Java Spring 容器
      Spring系列文章:Bean的获取⽅式
      Spring系列文章:Bean的获取⽅式
      |
      6天前
      |
      安全 Java Spring
      Spring框架中的单例Bean是线程安全的吗?
      Spring框架中的单例Bean是线程安全的吗?
      10 1
      |
      5天前
      |
      XML 前端开发 Java
      【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)
      【JavaEE】深入了解Spring中Bean的可见范围(作用域)以及前世今生(生命周期)
      8 0
      |
      5天前
      |
      存储 缓存 Java
      【JavaEE】Spring中注解的方式去获取Bean对象
      【JavaEE】Spring中注解的方式去获取Bean对象
      3 0
      |
      5天前
      |
      存储 Java 对象存储
      【JavaEE】Spring中注解的方式去存储Bean对象
      【JavaEE】Spring中注解的方式去存储Bean对象
      9 0
      |
      5天前
      |
      存储 Java 对象存储
      【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
      【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
      9 0
      |
      6天前
      |
      消息中间件 安全 Java
      在Spring Bean中,如何通过Java配置类定义Bean?
      【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
      22 1
      |
      6天前
      |
      XML Java 数据格式
      Spring Bean
      【4月更文挑战第30天】Spring Bean
      17 0
      |
      6天前
      |
      前端开发 Java 数据格式
      【Spring系列笔记】定义Bean的方式
      在Spring Boot应用程序中,定义Bean是非常常见的操作,它是构建应用程序的基础。Spring Boot提供了多种方式来定义Bean,每种方式都有其适用的场景和优势。
      37 2