设为首页 加入收藏

TOP

Spring IOC官方文档学习笔记(四)之依赖项(下)(一)
2023-07-25 21:39:24 】 浏览:50
Tags:Spring IOC 方文档 习笔记 赖项

3.depends-on

(1) depends-on用来表示一个bean的实例化依靠另一个bean的先实例化,如果在一个bean A上定义了depends-on bean B就表示:bean A实例化前先实例化bean B。

<!-- 例一 -->
<beans ...>
    <!-- 对于下面这俩个bean,谁先谁后创建不能确定 -->
    <bean id="exampleA" class="cn.example.spring.boke.ExampleA"></bean>
    <bean id="exampleB" class="cn.example.spring.boke.ExampleB"></bean>
</beans>

<!-- 例二 -->
<beans ...>
    <!-- exampleB depends-on exampleA,因此exampleA会先于exampleB被创建 -->
    <bean id="exampleA" class="cn.example.spring.boke.ExampleA"></bean>
    <bean id="exampleB" class="cn.example.spring.boke.ExampleB" depends-on="exampleA"></bean>
</beans>

4.懒加载

(1) 默认情况下,Spring会在容器启动时初始化所有的singleton bean,因为在这种情况下,某些配置错误会尽早发现,但如果我们不想提前初始化bean,就可以指定bean的lazy-init属性,来延迟初始化bean,这样这个bean会在第一次请求时被初始化而非在容器启动时被初始化

<beans ...>
    <!-- exampleA会在第一次请求时被初始化 -->
    <bean id="exampleA" class="cn.example.spring.boke.ExampleA" lazy-init="true"></bean>
    <!-- exampleB会在容器启动时被初始化 -->
    <bean id="exampleB" class="cn.example.spring.boke.ExampleB"></bean>
</beans>

(2) 注意:当延迟初始化的bean是非延迟初始化的bean的依赖项时,延迟初始化就失效了,它也会在容器启动时被初始化,因为容器在启动时必须为这个非延迟初始化的bean注入依赖项

(3) 使用beans标签上的default-lazy-init属性批量设置延迟初始化的bean

<beans default-lazy-init="true"> 
  <!-- 相当于给容器内的每一个bean都提供了lazy-init=true属性 --> 
</beans>

4.自动装配

(1) 对于存在依赖关系的多个bean,我们可以通过ref属性来手动注入依赖项,同时,如果不想手动,可通过设置bean标签的autowire属性来开启Spring的自动装配功能,它会按照所给的策略来自动的注入依赖项,相较于手动装配,其具有自动更新配置,简化代码等优点,如下

<!-- 例一:手动装配 -->
<beans ...>
    <bean id="exampleA" class="cn.example.spring.boke.ExampleA"></bean>

    <bean id="exampleB" class="cn.example.spring.boke.ExampleB">
        <!-- 使用ref来配置依赖项 -->
        <property name="exampleA" ref="exampleA"></property>
    </bean>
</beans>

<!-- 例二:自动装配 -->
<beans ...>
    <bean id="exampleA" class="cn.example.spring.boke.ExampleA"></bean>
    
    <!-- autowire属性设置为byType,告诉容器来按照类型进行依赖项的注入 -->
    <bean id="exampleB" class="cn.example.spring.boke.ExampleB" autowire="byType"></bean>
</beans>

(2) 自动装配策略,即autowire属性的取值:

策略 描述
no 默认选项,即不进行自动装配,bean之间的依赖关系通过指定ref属性来手动装配
byName 根据属性名称进行自动装配,Spring会寻找与属性名同名的bean来进行装配,比如上面的例子中,exampleB对象有一个名为exampleA的成员变量,则Spring会在容器中寻找id为exampleA的这个bean进行注入
byType 根据属性类型进行自动装配,如果容器中恰好存在一个同类型的bean,则会进行自动装配,如果存在多个,则会抛出异常,如果没有该类型的bean,则什么也不会发生,属性不会被注入
constructor 类似于byType,不过针对的是构造函数参数进行的自动装配,如果容器中不存在类型跟构造函数参数的类型一样的bean时,将引发异常

此外,可通过byType或constructor策略,来对数组或集合进行自动装配,注入与类型相匹配的所有bean,如下

public class ExampleA {}

//ExampleB中存在一个类型为ExampleA的集合,希望通过这个集合来接收容器内所有类型为ExampleA的bean
public class ExampleB {
    private List<ExampleA> exampleAList;

    public void setExampleAList(List<ExampleA> exampleAList) {
        this.exampleAList = exampleAList;
    }
}

<!-- xml配置文件 -->
<
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇每日算法之和为S的两个数字 下一篇笑死,面试官又问我SpringBoot自..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目