作者:小白学习 | 来源:互联网 | 2023-07-23 18:28
文章目录
- Spring和Spring Framework
- 1、Bean容器
- 2、IOC
- 3、DI
- 4、Bean的生命周期
- BeanFactory和ApplicationContext
Spring和Spring Framework
Spring是一个生态体系,其中包含了Spring Framework、Spring Boot、Spring cloud等等。我们一般常说的Spring框架指的是Spring Framework,所以这篇文章准确的说是对Spring Framework的理解
Spring Framework是一个Bean容器
1、Bean容器
通过Bean容器统一管理对象的生命周期
优点:
(1)减少对象的创建、销毁的步骤,提高了效率
(2)可以统一管理对象的依赖关系
Bean配置项:
(1)scope:singleton(单例)和prototype(原型),每次从容器中获取对象时,是否获取的是同一个(spring默认的是singleton)
(2)静态工厂方法:factory-method
(3)实例工厂方法:factory-bean+factory-method
<!--通过静态方法实例化对象-->
<bean id="duck3" class="Frank.model.DuckFactory" factory-method="create"></bean>
<bean id="duckFactory" class="Frank.model.DuckFactory" />
<!--通过实例方法实例化对象-->
<bean id="duck4" factory-bean="duckFactory" factory-method="create2" />
2、IOC
IOC(Inversion of Control)控制反转
bean对象从程序自行管理的方式,转变为Spring容器管理,控制权发生了反转
优势:容器统一管理bean对象,对象解耦
3、DI
DI(Dependency Injection)依赖注入
bean对象设置属性的依赖关系
注入方式:
(1)属性注入(无参构造方法)
(2)构造方法注入
属性名称 | 描述 |
---|
id | Bean的唯一标识符,Spring容器对Bean的配置和管理都是通过该属性完成 |
name | Spring容器也可以通过此属性对容器中Bean进行配置和管理 |
class | 该属性指定了Bean的具体实现类,必须是个完整的类名,使用类的全限定名 |
scop | 设定Bean的作用域 |
constructor-arg | 元素的子元素,可以使用此元素传入构造参数进行实例化 |
property | 元素的子元素,用于调用 Bean 实例中的 Set 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名 |
value | 和 等元素的子元素,用于直接指定一个常量值 |
list | 封装List或数组类型的依赖注入 |
ref | 和 等元素的子元索,该元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用 |
下面是注入方式的举例:
<!--定义Been对象,默认是通过无参构造生成对象 ,没有设置scope默认为singleton-->
<bean id="duck1" class="Frank.model.Duck">
<property name="name" value="Gaga" />
<property name="age" value="10" />
</bean>
<!--通过有参的构造方法定义Bean对象-->
<bean id="duck2" class="Frank.model.Duck" scope="prototype">
<constructor-arg name="name" value="烤鸭" />
<constructor-arg name="age" value="2" />
</bean>
<!--引用已有的bean对象:ref -->
<bean id="duckShop" class="Frank.model.DuckShop">
<property name="ducks">
<list>
<ref bean ="duck1"/>
<ref bean="duck2" />
</list>
</property>
</bean>
4、Bean的生命周期
(1)BeanNameAware接口:传入当前Bean的id
(2)BeanFactoryAware接口:传入当前工厂实例的引用
(3)ApplicationContextAware接口:传入当前ApplicationContext实例的引用
Spring 容器可以管理 singleton 作用域 Bean 的生命周期。在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。
对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。
BeanFactory和ApplicationContext
BeanFactory是基础类型的IOC容器,负责初始化各种Bean,并调用他们的生命周期方法
ApplicationContext是BeanFactory的子接口
BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的,二者的主要区别在于,如果Bean的某一个属性没有注入,则使用BeanFactory加载后,在第一次调用getBean()方法时会抛异常,而ApplicatonContext则在初始化的时候自检,这样有利于检查所依赖的属性是否注入