本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器。通过本篇的学习,可以达成如下目标。
● 认识Spring Bean类
● 掌握Bean类的配置项
● 将Bean类添加到Spring IOC容器
1、什么是Spring Bean类
Spring Bean是事物处理组件类和实体类(POJO)对象的总称,Spring Bean被Spring IOC容器初始化,装配和管理。
Spring Bean类包含事务处理组件和实体类(POJO)。在课程案例SpringProgram项目中,EmailNotice和PhoneNotice类属于事务组件类,用于处理发送通知事务,包含事务处理代码;Teacher类是实体类(POJO),仅包含实体属性及其set和get方法。
Teacher类代码如下。
Teacher类仅有两个属性:老师姓名(name)和上课时间(classtime)。方法getNotify()返回老师的上课时间。
EmailNotice类主要通过sendMessage()方法发送邮件给老师,因此该类依赖于老师类。sendMessage()是主要的事务处理方法。
2、Bean类的配置项
Spring IOC容器管理Bean时,需要了解Bean的类名、名称、依赖项、属性、生命周期及作用域等信息。为此,Spring IOC提供了一系列配置项,用于Bean在IOC容器中的定义。
① class
该配置项是强制项,用于指定创建Bean实例的Bean类的路径。
② name
该配置项是强制项,用于指定Bean唯一的标识符,在基于 XML 的配置项中,可以使用 id和或 name 属性来指定 Bean唯一 标识符。
③ scope
该配置项是可选项,用于设定创建Bean对象的作用域。
④ constructor-arg
该配置项是可选项,用于指定通过构造函数注入依赖数据到Bean。
⑤ properties
该配置项是可选项,用于指定通过set方法注入依赖数据到Bean。
⑥ autowiring mode
该配置项是可选项,用于指定通过自动依赖方法注入依赖数据到Bean。
⑦ lazy-initialization mode
该配置项是可选项,用于指定IOC容器延迟创建Bean,在用户请求时创建Bean,而不要在启动时就创建Bean。
⑧ initialization
该配置项是可选项,用于指定IOC容器完成Bean必要的创建后,调用Bean类提供的回调方法对Bean实例进一步处理。
⑨ destruction
该配置项是可选项,用于指定IOC容器在销毁Bean时,调用Bean类提供的回调方法。
3、将Bean类添加到Spring IOC容器
将Bean类添加到Spring IOC容器有三种方式。一种方式是基于XML的配置文件;一种方式是基于注解的配置;一种方式是基于Java的配置。下面主要介绍基于XML的配置方式,基于注解和基于Java的配置放在后面进行讨论,放在后面讨论的原因是一些其它重要的Spring概念还需要掌握。
(1)XML配置文件的创建与存储
项目创建后,需要手动创建Spring配置文件,Spring配置文件默认名称是applicationContext.xml,也可以使用其它文件名称代替。在课程案例SpringProgram项目中,Spring核心配置文件被命名为dispatcher.xml,存储到src/config目录,如下图所示。
图1 Spring配置文件在SpringProgram项
(2)Spring配置文件的加载
加载Spring的配置文件有多种方式,比较常用的是在web.xml加载配置文件。
① 使用ContextLoaderListener加载配置文件
如果配置文件名称采用默认的applicationContext.xml,并且存存储在WebContent/WEB-INF目录下,在web.xml添加下述代码。
ContextLoaderListener类在启动Web容器时,自动加载Spring applicationContext.xml的配置信息。
② 加载自命名的配置文件
Spring配置文件名称若没有采用applicationContext.xml,而是采用其它名称,如dispatcher.xml,文件依然存储到WebContent/WEB-INF目录下时,可在web.xml添加下述代码。
param-name标签用于设置配置文件的存储位置,ContextLoaderListener从该存储位置读取配置文件。
③ 通过配置目录加载配置文件
企业级别的Web项目,配置文件比较多。不仅有Spring的配置文件,也包括其它框架的配置文件。将配置文件集中起来并存储到一个特定目录下进行综合管理,是开发大型项目常用的方法。课程案例SpringProgram项目中,Spring核心配置文件被命名为dispatcher.xml,存储到src/config目录。在这种情况下,需要在web.xml添加下述代码。
标签用来声明整个WEB项目内的上下文初始化参数。标签指定初始化参数名称,指定初始化参数的值。在web.xml配置的监听器类可以通过上下文环境获取指定参数名称的值。
例如课程案例代码:
代码使用上下文ServletContext类调用getInitParameter获取指定参数名称的值(String配置文件的存储位置),然后使用ClassPathXmlApplicationContext类读取配置文件到ApplicationContext对象。这里的classpath是指 WEB-INF文件夹下的classes目录。
(3)在Spring配置文件中定义Bean
已创建的Bean类需要在Spring配置文件中进行定义,Spring IOC容器才能对Bean进行组配和管理。
课程案例Teacher类在Spring配置文件定义的代码如下。
标签用于定义Bean,各属性说明如下:
① id:Bean的唯一标识,ApplicationContext对象可以通过id获取该Bean的实例。
② calss:Bean类的存储路径。
标签用于从外部注入Bean的属性值, 标签各属性说明如下:
① name:Bean类的属性名称。
② value:name所值属性的值。
课程案例EmailNotice类在Spring配置文件定义的代码如下。
EmailNotice类的标签相对Teacher类来说,多了p:teacher-ref属性,该属性用于对Bean内部的对象属性进行注入,格式为:
P: 属性名 = 注入的对象
课程小结
项目中的事务处理组件和实体类(POJO)可以作为Bean类,Bean类需要在Spring配置文件中进行定义,才能被IOC容器管理和组配。Spring IOC容器管理Bean时,需要了解Bean的类名、名称、依赖项、属性、生命周期及作用域等信息。为此,Spring IOC提供了一系列配置项,用于Bean在IOC容器中的定义。