Spring和Spring Framework

版权声明:本文为海TAO原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45397953/article/details/106877426

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>

  
  
  • 1
  • 2
    <bean id="duckFactory" class="Frank.model.DuckFactory" />
    <!--通过实例方法实例化对象-->
    <bean id="duck4" factory-bean="duckFactory" factory-method="create2" />

  
  
  • 1
  • 2
  • 3

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< bean>元素的子元素,可以使用此元素传入构造参数进行实例化
property< bean>元素的子元素,用于调用 Bean 实例中的 Set 方法完成属性赋值,从而完成依赖注入。该元素的 name 属性指定 Bean 实例中的相应属性名
value< property> 和 < constractor-arg> 等元素的子元素,用于直接指定一个常量值
list封装List或数组类型的依赖注入
ref< property> 和 < constructor-arg> 等元素的子元索,该元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用

下面是注入方式的举例:

  <!--定义Been对象,默认是通过无参构造生成对象 ,没有设置scope默认为singleton-->
    <bean id="duck1" class="Frank.model.Duck">
        <property name="name" value="Gaga" />
        <property name="age" value="10" />
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
    <!--通过有参的构造方法定义Bean对象-->
    <bean id="duck2" class="Frank.model.Duck" scope="prototype">
        <constructor-arg name="name" value="烤鸭" />
        <constructor-arg name="age" value="2" />
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
   <!--引用已有的bean对象:ref -->
    <bean id="duckShop" class="Frank.model.DuckShop">
        <property name="ducks">
            <list>
                <ref bean ="duck1"/>
                <ref bean="duck2" />
            </list>
        </property>
    </bean>

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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则在初始化的时候自检,这样有利于检查所依赖的属性是否注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值