第三章、Spring Bean(Bean的配置、Bean的实例化(三种方式)、Bean的作用域、Bean的生命周期、Bean的装配方式(XML、注解))


Spring Bean(Bean的配置、Bean的实例化(三种方式)、Bean的作用域、Bean的生命周期、Bean的装配方式(XML、注解Component、Resposity、Service Controller、Autowired(按类型)、Qualifier(按名称)、Resource))

Spring Bean

一、Bean的配置

Spring 可以看作一个大型工厂, 用于生产和管理 Spring 容器中的 Bean。 如果要使用这个工厂生产和管理 Bean, 需要开发者将 Bean 配置在 Spring 的配置文件中。 Spring 框架支持 XML 和 Properties 两种格式 的配置文件,在实际开发中常用 XML 格式的配置文件。

从前面的学习中可以知道XML配置文件的根元素是,中包含了多个子元素,每一个元素定义了一个Bean,并描述Bean如何被装配到Spring容器。

在这里插入图片描述在这里插入图片描述

二、Bean的实例化

如果我们想要使用一个对象,就要实现实例化该对象,同样在Spring框架中,如果想要使用Spring容器中的Bean,也需要实例化Bean,Spring 框架实例化 Bean 有 3 种方式,即构造方法实例化、 静态工厂实例化和实例工厂实例化(其中,最常用的方法是构造方法实例化 )。

1、构造方法实例化

在 Spring 框架中,Spring容器可以调用 Bean 对应类中的无参数构造方法来实例化 Bean,这种方式称为构造方法实例化。
在这里插入图片描述

2、静态工厂实例化

在使用静态工厂实例化 Bean 时要求开发者在工厂类中创建一个静态方法来创建Bean的实例。在配置 Bean时, class属性指定静态工厂类,同时还需要使用 factory-method属性指定工厂类中的静态方法 。 下面通过 ch3 应用测试静态工厂实例化。

在这里插入图片描述

3、实例工厂实例化

在使用实例工厂实例化 Bean 时要求开发者在工厂类中创建一个实例方法来创建 Bean 的实例。在配置 Bean 时需要使用 factory-bean 属性指定配置的实例工厂,同时还需要使用 factory-method 属性指定实例工厂中的实例方法。
在这里插入图片描述

三、Bean的作用域

在Spring中不仅可以完成Bean 的实例化,还可以为 Bean指定作用域。在 Spring5.0 中为 Bean 的实例定义了如表 3.2所示的作用域。

在这里插入图片描述

在表 3.2所示的 6种作用域中, singleton和 prototype是最常用的两种,后面4种作用域仅在 Web Spring应用程序上下文中使用

1、singleton作用域

当将 bean的 scope设置为 singleton时, SpringIoC容器仅生成和管理一个Bean实例。 在使用id或name获取Bean实例时,IoC容器将返回共享的Bean实例。

由于 singleton是 scope 的默认方式 ,因此有两种方式将 bean 的 scope 设置为 singleton。 配置文件示例代码如下:

在这里插入图片描述

2、prototype作用域

在这里插入图片描述

四、Bean的生命周期

一个对象的生命周期包括创建(实例化与初始化)、使用以及销毁等阶段,在 Spring 中,Bean对象周期也遵循这一过程,但是Spring提供了许多对外接口,允许开发者对3 个过程(实例化、初始化、销毁)的前后做一些操作。在 Spring Bean中,实例化是为 Bean 对象开辟空间,初始化则是对属性的初始化。

一个对象的生命周期包括创建(实例化与初始化)、使用以及销毁等阶段,在 Spring 中, Bean 对象周期也遵循这一过程,但是 Spring 提供了许多对外接口,允许开发者对 3 个过程(实例化、初始化、销毁)的前后做一些操作。在 Spring Bean 中,实例化是为 Bean 对象开辟空间,初始化则是对属性的初始化。

在这里插入图片描述在这里插入图片描述

五、Bean的装配方式

Bean的装配可以理解为将Bean依赖注入到Spring容器中,Bean的装配方式即Bean依赖注入的方式。SPring容器支持基于XML的装配方式、基于注解的装配以及自动装配等多种装配方式,其中最受喜爱的是基于注解的装配。

1、基于XML配置的装配(也就是构造函数装配和使用setter方法装配)

基于 XML 配置的装配方式已经有很久的历史了,曾经是主要的装配方式。通过 2.3 节的学习,我们知道 Spring 提供了两种基于 XML 配置的装配方式, 即使用构造方法注入 和使用属性的 setter方法注入。

在使用构造方法注入方式装配 Bean 时, Bean 的实现类需要提供带参数的构造方法,并在配置文件中使用< bean>元素的子元素来定义构造方法的参数:在使用属性的 setter 方法注入方式装配 Bean 时, Bean 的实现类需要提供一个默认无参数的构造方法,并为需要注入的属性提供对应的setter方法,另外还需要使用元素的子元素为每个属性注入值。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、基于注解的装配方式

如果应用中存在大量的注解需要去配置,会导致XML配置文件过于庞大,不方便以后的升级与维护,因此更多时候会推荐使用注解的方式去装配。
(1)Component

该注解是一个泛化的概念,仅仅表示一个组件对象( Bean),可以作用在任何层次上。下面通过一个实例讲解@ Component。

听视频的时候的理解是这个相当于

如果后面设置名称,就相当于id=?

注意:

配置注解之后,必须要去扫面注解

在这里插入图片描述

(2)Repository

该注解用于将数据访问层(DAO)的类标识为Bean, 即注解数据访问层Bean,其功能与@Component相同。

(3)@Service

该注解用于标注一个业务逻辑组件类(Service层〉,其功能与@Component相同 。

(4)@Controller

该注解用于标注一个控制器组件类(SpringMVC 的 Controller),其功能与@Component 相同。

(5)@Autowired

该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的工作。通过使用@Autowired来消除 setter和 getter方法。 默认按照 Bean 的类型进行装配。

(6)@Resource

该注解与@Autowired的功能一样,区别在于该注解默认是按照名称来装配注入的,只有当找不到与名称匹配的 Bean 时才会按照、类型来装配注入;而@Autowired 默认按照 Bean 的类型进行装配,

如果想按照名称来装配注入,则需要和@Qualifier注解一起使用 。

@Resource注解有两个属性一-name和type。 name属性指定Bean实例名称,即按照、 名称来装配注入 ;type 属性指定Bean类型,即按照 Bean 的类型进行装配。

(7)@Qualifier

该注解与@Autowired注解配合使用。当@Autowired 注解需要按照名称来装配注入时需要和该注解一起使用, Bean的实例名称由@Qualifier注解的参数指定 。

总结

在上面几个注解中,虽然@Repository、@Service和 @Controller等注解的功能与@Component注解相同,但为了使类的标注更加清晰(层次化),在实际开发中推荐使用 @Repository标注数据访问层(DAO层〉、使用@Service标注业务逻辑层(Service层〉、使用@Controller标注控制器层(控制层)。

发布了105 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38367817/article/details/105608189