Spring Bean 介绍 [Spring][Bean 概述][bean 元素常用属性][Bean 的作用域]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

文章目录

  • 1 Spring Bean 概述
  • 2 bean 元素的常用属性
  • 3 Spring Bean 的作用域
  • 【友情链接】
    • 微信公众号:码农阿杰
    • 博客园
  • 【参考资料】
    • [Spring Framework Documentation](https://docs.spring.io/spring/docs/5.2.6.RELEASE/spring-framework-reference/index.html) 版本5.2.7.RELEASE
    • spring
    • [Artifact Repository Browser](https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-milestone)
    • [Apache Commons](http://commons.apache.org/)

1 Spring Bean 概述

参考 Spring Framework Documentation 中 Bean Overview。

Spring 容器可以被看作为一个工厂,而 Spring 容器中的 Bean 就相当于该工厂的产品。如果需要这个工厂生产和管理 Bean,则需要告诉容器需要哪些 Bean,以及需要以怎样的方式将这些 Bean 装配到一起。

Spring IoC 容器可以管理一个或多个 bean。这些 bean 是使用开发者提供给容器的配置元数据创建的,通常情况下,Spring 会以 XML 定义的文件格式作为 Spring 的配置文件,这种配置方式通过 XML 文件注册并管理 Bean 之间的依赖关系 。

XML 格式配置文件的根元素是 ,该元素包含了多个 子元素,每一个 子元素定义了一个 Bean,并描述了该 Bean 如何被装配到 Spring 容器中。

在容器本身内,这些 bean 定义表示为 BeanDefinition 对象,其中包含以下元数据:

  • 包限定的类名:通常,定义了 Bean 的实际实现类。
  • Bean 行为配置元素:用于声明 Bean 在容器中的行为(作用域,生命周期回调等)。
  • 依赖项:对其他 bean 进行工作所需的引用,这些引用也称为协作者或依赖项。
  • 其他配置:要在新创建的对象中设置的其他配置设置,例如,池的大小限制或要在管理连接池的 bean 中使用的连接数。

定义 Bean 的示例代码,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/jdbc 
            http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">
    <bean id="..." class="...">  
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->
</beans>

2 bean 元素的常用属性

部分常用属性介绍,可到 Spring Framework Documentation 中的 Bean Overview 中查看。

元素中包含很多属性,常用属性如下所示:

  • id: Bean 的唯一标识符,Spring 容器对 Bean 的配置和管理都通过该属性完成。
  • class:指定了 Bean 的具体实现类,它必须是一个完整的类名,使用类的全限定名(包名+类名)。
  • name:给 Bean 起的别名,name 属性中可以为 Bean 指定多个名称,每个名称之间用逗号或分号隔开。
  • scope:用于设定 Bean 实例的作用域,其属性值有 singleton、prototype、request、session 和 global Session。其默认值是 singleton。具体含义请看下面的第3小节 Spring Bean 的作用域。
  • constructor-arg元素的子元素,可以使用此元素传入构造参数进行实例化。该元素的 index 属性指定构造参数的序号(注意:从 0 开始),type 属性指定构造参数的类型。
  • property元素的子元素,用于调用 Bean 实例中的 Set 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名。
  • ref 等元素的子元索,该元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用。
  • value 等元素的子元素,用于直接指定一个常量值。

3 Spring Bean 的作用域

Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。六种作用域,如下所示:

  • (1)singleton
    单例模式,也是 Bean 的默认模式,将每个 Spring IoC 容器的单个 bean 定义范围限定为单个对象实例。
  • (2)prototype
    原型模式,将单个 bean 定义的作用域限定为任意数量的对象实例。每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例。
  • (3)request
    将单个 bean 定义的范围限定为单个 HTTP 请求的生命周期。也就是说,每个HTTP请求都有一个在单个 bean 定义后面创建的 bean 实例。仅在可感知网络的 Spring 上下文中有效 ApplicationContext。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效。
  • (4)session
    将单个 bean 定义的范围限定为 HTTP 的生命周期 Session。仅在可感知网络的 Spring 上下文中有效 ApplicationContext。在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效。
  • (5)application
    将单个bean定义的作用域限定为的生命周期ServletContext。仅在可感知网络的Spring上下文中有效ApplicationContext。
  • (6)websocket
    将单个bean定义的作用域限定为的生命周期WebSocket。仅在可感知网络的Spring上下文中有效ApplicationContext。

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Spring Framework Documentation 版本5.2.7.RELEASE

spring

Artifact Repository Browser

Apache Commons

你可能感兴趣的:(#,Spring,【SSM】)