伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

延迟初始化Spring Bean:延迟初始化的Bean会影响依赖注入吗?

来源:本站原创 浏览:61次 时间:2023-01-30

前面提到过Bean的初始化方式,在Bean 的配置元信息时候我们知道Bean的元信息配置中有lazy-init 延迟初始化属性配置,延迟初始化Spring Bean 还有Java 注解API的方式实现


案例分析

这里已Java 注解方式案例讲解描述

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Lazy {

    /**
     * Whether lazy initialization should occur.
     */
    boolean value() default true;

}


看到Lazy 注解有默认属性配置true,非延迟加载;如果我们使用非延迟加载其实可以不用标注此注解,这里方便代码阅读标注上


  • 非延迟加载

运行结果  可以看出延迟加载在应用上下文启动之后加载


  • 延迟加载

运行结果 可以看出延迟加载在应用上下文启动之前加载


分析

其中的差异可以查看源码分析在


applicationContext.refresh()

启动应用上下文方法中可以看到一个方法


finishBeanFactoryInitialization(beanFactory);

这个方法的作用是完成Bean的初始化动作,看注释 


Instantiate all remaining (non-lazy-init) singletons.

它的意思就是:它会去初始化或者是实例化我们所有的非延迟初始化的一个单体类或者单体Bean


进入方法里面又可以发现



// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);

这里又进行补充,就是初始化我们剩余的这些东西

换而言之在我们应用上下启动的时候有一个前置动作,普通的Bean在这里初始化 ,部分Bean是需要我们内部容器自己做初始化 。另一个动作就是延迟加载按需加载Bean


总结

其实延迟加载和非延迟加载在定义的时候,就是Bean注册的时候是没有区别按照你需要的时候进行注册;但是在依赖查找和依赖注入的时候它的区别就体现出来了,一个是在应用上下文启动之前,另一个在应用上下文启动之后


源码地址:

https://gitee.com/iByteCoding/thinking-in-spring


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net