热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring和SpringFramework的理解

文章目录

文章目录

  • 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)构造方法注入

属性名称描述
idBean的唯一标识符,Spring容器对Bean的配置和管理都是通过该属性完成
nameSpring容器也可以通过此属性对容器中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则在初始化的时候自检,这样有利于检查所依赖的属性是否注入


推荐阅读
author-avatar
小白学习
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有