zoukankan      html  css  js  c++  java
  • Spring中用@DependsOn注解控制Bean的创建顺序

    1. 概述
    Spirng容器自己会管理bean的生命周期和bean实例化的顺序,但是我们仍然可以根据我们自己的需求进行定制。我可以可以选择使用SmartLifeCycle接口,也可以用@DependsOn注解来管理初始化顺序。
    这个说明文档展示了@DependsOn的用法和依赖的bean缺失的问题和bean循环依赖(在一个bean实例化过程中依赖另一个bean)的问题。
    2. Maven
    首选,我们导入spring-context-xxx.jar的依赖。我们需要在pom.xml中加入以内容:
     
    org.springframework
    spring-context
    5.2.8.RELEASE
     
     
     
    3. @DependsOn
    我们使用这个注解定制需要依赖的bean,Spring 保证被依赖的bean将会在当前bean之前初始化。比如我们需要实例化FileProcessor,它所依赖的FileReader 和 FileWriter将会在FileProcessor之前被初始化。
    4. 配置
    用java注解方式(@Configuration)配置spirng:
    0
     
    我们使用@DependsOn注解配置了依赖。
     
    5. 用法
    测试代码:
    0
    5.1. 依赖缺失
     
    Spring在依赖bean缺失的情况下,将抛出异常BeanCreationException,root cause是
    NoSuchBeanDefinitionException
    0
    5.2. 循环依赖
     
    循环依赖情况下,将会抛出BeanCreationException,并且在异常信息中会告知哪个bean有循环依赖问题。
    0
     
    如下图bean的依赖关系,就会产生一个循环依赖(注意:如果没有使用@DependsOn注入,普通的@Autowire是不会循环依赖的,上一章讲的earlySingletonObjects缓存会解决这个问题)。
    0
     
    6. 关键点
    注意点:
    • 当我们使用@DependsOn时候我们必须用component-scanning
    • 如果在xml配置文件中使用@DependsOn,@DependsOn将不会生效。
     
    7. 结论
    当我们构建的系统有复杂的依赖需求的时候,@DependsOn将会很有用。
    他保障了spring在实例化某个bean前先完成它依赖的bean的初始化
     
    0
     
    原英文文档和demo源码地址: https://www.baeldung.com/spring-depends-on
  • 相关阅读:
    二分查找
    Java版各种排序算法 (冒泡,快速,选择,插入)
    mysql如何利用Navicat 导出和导入数据库
    eclipse项目红色叹号解决方法
    解决tomcat占用8080端口问题
    Window.onLoad 和 DOMContentLoaded事件的先后顺序
    jquery $(document).ready() 与window.onload的区别
    jQuery文档加载完毕的几种写法
    Emmet使用手册
    Sublime Text 3快捷键
  • 原文地址:https://www.cnblogs.com/kevin7234/p/13775657.html
Copyright © 2011-2022 走看看