Spring框架如何加载和定义Spring Bean类?

本篇介绍什么是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添加下述代码。

<context-param>标签用来声明整个WEB项目内的上下文初始化参数。<param-name>标签指定初始化参数名称,<param-value>指定初始化参数的值。在web.xml配置的监听器类可以通过上下文环境获取指定参数名称的值。

例如课程案例代码:

代码使用上下文ServletContext类调用getInitParameter获取指定参数名称的值(String配置文件的存储位置),然后使用ClassPathXmlApplicationContext类读取配置文件到ApplicationContext对象。这里的classpath是指 WEB-INF文件夹下的classes目录。

(3)在Spring配置文件中定义Bean

已创建的Bean类需要在Spring配置文件中进行定义,Spring IOC容器才能对Bean进行组配和管理。

课程案例Teacher类在Spring配置文件定义的代码如下。

<bean>标签用于定义Bean,各属性说明如下:

① id:Bean的唯一标识,ApplicationContext对象可以通过id获取该Bean的实例。

② calss:Bean类的存储路径。

<property>标签用于从外部注入Bean的属性值, <property>标签各属性说明如下:

① name:Bean类的属性名称。

② value:name所值属性的值。

课程案例EmailNotice类在Spring配置文件定义的代码如下。

EmailNotice类的<bean>标签相对Teacher类来说,多了p:teacher-ref属性,该属性用于对Bean内部的对象属性进行注入,格式为:

P: 属性名 = 注入的对象

 

课程小结

项目中的事务处理组件和实体类(POJO)可以作为Bean类,Bean类需要在Spring配置文件中进行定义,才能被IOC容器管理和组配。Spring IOC容器管理Bean时,需要了解Bean的类名、名称、依赖项、属性、生命周期及作用域等信息。为此,Spring IOC提供了一系列配置项,用于Bean在IOC容器中的定义。

发布了118 篇原创文章 · 获赞 157 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/smilejiasmile/article/details/104618791