Java EE之第2章Spring中的Bean

第2章 Spring的Bean

  • 2.1 Bean的配置
  • 2.2 Bean的实例化
  • 2.3 Bean的作用域
  • 2.4 Bean的生命周期
  • 2.5 Bean的装配方式

2.1 Bean的配置

1.Spring是一个大型工厂,工厂的作用是生产和管理Spring容器中的Bean。Spring容器支持XML和Properties两种格式的配置文件,在实际开发中,最常使用的就是XML格式的配置方式

XML格式:通过XML文件来注册并管理Bean之间的依赖关系

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

元素常用属性及如下:

属性或子元素名称 描述
id 是一个Bean的唯一标识符,Spring容器对Bean的配置,管理都通过该属性来完成
name Spring容器同样可以通过此属性对容器中的Bean进行配置和管理,name属性中可以为Bean指定多个名称,每个名称之间用逗号或分号隔开
class 该属性指定了Bean的具体实现类,它必须是一个完整的类名,使用类的全限定名
scope 用来设定Bean实例的作用域,其属性值有:singleton(单例),prototype(原型),request,session,global Session,application和websocket。其默认值为singleton
constructor-arg 元素的子元素,可以使用此元素传入构造参数进行实例化。该元素的index属性指定构造参数的序号(从0开始),type属性指定构造参数的类型,参数值可以通过ref属性或value属性直接指定,也可以通过ref或value子元素指定
property 元素的子元素,用于调用Bean实例中的setter方法完成属性赋值,从而完成依赖注入。该元素的name属性指定Bean实例中的相应属性名,ref或value属性用于指定参数值
ref 可以用于指定对Bean工厂中某个Bean实例的引用
value 可以用于直接指定一个常量值
list 用于封装List或数组类型的依赖注入
set 用于封装Set类型的依赖注入
map 用于封装Map类型的依赖注入
entry 元素的子元素,用于设置一个键值对。其key属性指定字符串类型的键值,ref或value子元素指定其值,也可以通过value-ref或value属性指定其值

注意:1.在配置文件中,通常一个普通的Bean只需要定义id(或name)和class两个属性即可

2.如果在Bean中未指定id和name,则Spring会将class值当作id使用

2.2 Bean的实例化

实例化Bean有三种方式:

1.构造器实例化(常用):是指Spring容器通过Bean对应类中默认的无参构造方法来实例Bean

2.静态工厂方式实例化:创建一个静态工厂的方法来创建Bean的实例化,其中Bean配置中的class属性所指定的不再是Bean实例的实现类,而是静态工厂,同时还需要使用factory-method属性来指定所创建的静态工厂方法

3.实例工厂方式实例化:采用直接创建Bean实例的方式,同时,在配置文件中,需要实例化的Bean也不是通过class属性直接指向的实例化类,而是通过factory-bean属性指向配置的实例工厂,然后使用factory-method属性确定使用工厂中的哪个方法

Bean的实例化推荐文章:https://www.cnblogs.com/chy18883701161/archive/2019/07/02/11117723.html

2.3 Bean的作用域

作用域名称 说明
singleton(单例) 使用singleton定义的Bean在Spring容器中将只有一个实例,也就是说,无论有多少个Bean引用它,始终将指向同一个对象。这也是Spring容器默认的作用域
prototype(原型) 每次通过Spring容器获取的prototype定义的Bean时,容器都将创建一个新的Bean实例
request 在一次HTTP 请求中,容器会返回该Bean的同一个实例。对不同的HTTP请求会产生一个新的Bean,而且该Bean仅在当前HTTP Session内有效
session 在一次HTTP Session中,容器会返回该Bean的同一个实例。对不同的HTTP请求会产生一个新的Bean,而且该Bean仅在当前HTTP Session内有效
globalSession 在一个全局的HTTP Session中,容器会返回该Bean的同一个实例。仅在使用portlet上下文时有效
application 为每个ServletContext对象创建一个实例。仅在Web相关的ApplicationContext中生效
websocket 为每个websocket对象创建一个实例。仅在Web相关的ApplicationContext中生效

singleton作用域:是Spring容器默认的作用域,当Bean的作用域为singleton时,Spring容器就只会存在一个共享的Bean实例,并且所有对Bean的请求,只要id与该Bean的id属性相匹配,就会返回同一个Bean实例。对于无会话状态的Bean(如Dao组件,Service组件)来说,是最理想的选择

prototype作用域:Spring容器会为每个对该Bean的请求都创建一个新的实例。对需要保持会话状态的Bean(如Struts2的Action类)是最理想的选择

Bean的作用域推荐文章:https://www.cnblogs.com/hamawep789/p/10778364.html

2.4 Bean的生命周期

Spring容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务

Spring容器对Bean的生命周期进行管理的过程如下:

1.通过构造器或工厂方法创建Bean的引用

2.为Bean的属性设置值和对其它Bean的引用

3.调用Bean的初始化方法

4.Bean可以使用

5.当容器关闭时,调用Bean的销毁方法

在Bean的声明里设置init-method和destroy-method属性,为Bean指定初始化和销毁方法

2.5 Bean的装配方式

(1)XML的装配(设值注入和构造注入)

(2)基于注解的装配和

(3)自动装配

Bean的装配方式推荐文章:https://www.cnblogs.com/chy18883701161/p/11117797.html

你可能感兴趣的:(JAVA,EE企业级应用开发教程)