spring boot依赖注入原理(springboot 启动时加载数据(字典)到内存)

2025-05-23 22:15:01 0

spring boot依赖注入原理(springboot 启动时加载数据(字典)到内存)

其实spring boot依赖注入原理的问题并不复杂,但是又很多的朋友都不太了解springboot 启动时加载数据(字典)到内存,因此呢,今天小编就来为大家分享spring boot依赖注入原理的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

springboot 启动时加载数据(字典)到内存

在项目启动时将字典表中的字典项加载到内存,通过静态工具类的静态map,支持根据key查询value,根据value查询key。

lmap存储字典中的所有字典项,根据type查询对应类型的name和value。返回的BiMap支持根据key查询value,

inverse()可以将value和key反转,根据value查询key。lmap获取的结构如下:

BiMap是一个双向关联的数据结构,而它对key和value严格的保证唯一性。

​ 如果使用put方法添加相同的value值或key值则会抛出异常:java.lang.IllegalArgumentException;

​ 如果使用forcePut方法添加则会覆盖掉原来的value值。

​ inverse方法会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,它实现了一种视图关联,对于反转后的map的所有操作都会影响原先的map对象。

spring中Constructor、@Autowired、@PostConstruct的顺序(网上解释比较清楚的版本)

要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。

如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。

Constructor 》》 @Autowired 》》 @PostConstruct

ExcelListener在使用apiInfoService时无法自动注入,通过定义一个静态变量 listener,使用@PostConstruct方法来初始化。

Spring—ObjectProvider更加宽泛的依赖注入

在Spring4.3之后,引入了一个新特性:当构造方法只有一个参数时,可以不使用 @ Autowired 注解。

在SpringBoot的自动装配类中,这种形式被大量使用。

在Spring4.3版本,引入了 ObjectProvider 接口。

可以看做是依赖注入的懒加载,异常将从启动阶段转移到业务运行的阶段。

在Spring5.1版本后提供了基于 orderedStream 方法来获取有序的Stream方法。

在某些业务中,我们需要这样一种场景:若配置文件配置了某些参数,那么便启用某个功能。

SpringBoot为我们提供了 @ConditionalOnProperty(prefix = "xxx.rabbit", name = "thresholdTime") 注解

例如:配置了一个拦截器,只有在yml文件中含有 xxx.rabbit.thresholdTime 的配置时,才会将 timeoutInterceptor 这个bean放入到Spring容器中。

但是若没有配置的话,Spring容器中没有该Bean,那么如何宽松的注入呢?

注意点:

Spring Boot 注解之ObjectProvider源码追踪

spring中依赖注入的原理

  1. Spring 从核心而言,是一个DI 容器,其设计哲学是提供一种无侵入式的高扩展性框架。即无需代码中涉及Spring专有类,即可将其纳入Spring容器进行管理。 

  2. 作为对比,EJB则是一种高度侵入性的框架规范,它制定了众多的接口和编码规范,要求实现者必须 遵从。侵入性的后果就是,一旦系统基于侵入性框架设计开发,那么之后任何脱离这个框架的企图都将付 出极大的代价。

  3. 为了避免这种情况,实现无侵入性的目标。Spring 大量引入了Java 的Reflection机制,通过动态 调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。

  4. org.springframework.beans包中包括了这些核心组件的实现类,核心中的核心为BeanWrapper 和BeanFactory类。这两个类从技术角度而言并不复杂,但对于Spring 框架而言,却是关键所在。

  5. InputStream is = new FileInputStream("bean.xml"); XmlBeanFactory factory = new XmlBeanFactory(is); Action action = (Action) factory.getBean("TheAction");

  6. 此时获得的Action实例,由BeanFactory进行加载,并根据配置文件进行了初始化和属性设定。

  7. 联合上面关于BeanWrapper的内容,可以看到,BeanWrapper实现了针对单个Bean的属性设 定操作。而BeanFactory则是针对多个Bean的管理容器,根据给定的配置文件,BeanFactory从中读取 类名、属性名/值,然后通过Reflection机制进行Bean加载和属性设定。

以上就是我们为大家找到的有关“spring boot依赖注入原理(springboot 启动时加载数据(字典)到内存)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

spring boot依赖注入原理(springboot 启动时加载数据(字典)到内存)

本文编辑:admin

更多文章:


session已过期重新授权(苹果手机session过期怎么恢复啊)

session已过期重新授权(苹果手机session过期怎么恢复啊)

本篇文章给大家谈谈session已过期重新授权,以及苹果手机session过期怎么恢复啊对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录苹果手机session过期怎么恢复啊淘宝session过期是什么意思session过期怎么

2026年3月8日 10:00

course词组(course造句)

course词组(course造句)

各位老铁们好,相信很多人对course词组都不是特别的了解,因此呢,今天就来为大家分享下关于course词组以及course造句的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录course造句有set the c

2026年2月24日 03:00

scrapy中间件(scrapy框架中setting中中间件数字大的先执行么)

scrapy中间件(scrapy框架中setting中中间件数字大的先执行么)

本篇文章给大家谈谈scrapy中间件,以及scrapy框架中setting中中间件数字大的先执行么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录scrapy框架中setting中中间件数字大的先执行么Scrapy 主要包括哪

2026年8月22日 13:45

matlab定义变量并赋初值(在matlab中用输入量给变量赋值)

matlab定义变量并赋初值(在matlab中用输入量给变量赋值)

这篇文章给大家聊聊关于matlab定义变量并赋初值,以及在matlab中用输入量给变量赋值对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录在matlab中用输入量给变量赋值matlab预定义变量如何初始化matlab预定义变量

2026年6月11日 15:00

webview是什么(webview是什么东西)

webview是什么(webview是什么东西)

各位老铁们好,相信很多人对webview是什么都不是特别的了解,因此呢,今天就来为大家分享下关于webview是什么以及webview是什么东西的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录webview是什么

2025年9月4日 07:45

青色颜色名称大全(青色是什么样的颜色,国标是好多)

青色颜色名称大全(青色是什么样的颜色,国标是好多)

这篇文章给大家聊聊关于青色颜色名称大全,以及青色是什么样的颜色,国标是好多对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录青色是什么样的颜色,国标是好多青色有几种颜色古汉语中“青“可以指那几种颜色青色都有哪几种赤橙黄绿青蓝紫,

2025年7月20日 15:30

pentablet(非凡复刻cet-630这块板子想在64位win8环境下正常使用要装哪一版的驱动pentablet_5.35-3试过不行)

pentablet(非凡复刻cet-630这块板子想在64位win8环境下正常使用要装哪一版的驱动pentablet_5.35-3试过不行)

大家好,今天小编来为大家解答以下的问题,关于pentablet,非凡复刻cet-630这块板子想在64位win8环境下正常使用要装哪一版的驱动pentablet_5.35-3试过不行这个很多人还不知道,现在让我们一起来看看吧!本文目录非凡复

2025年6月19日 10:15

微信网页的网址是多少?网页的网址是什么

微信网页的网址是多少?网页的网址是什么

其实网页的网址的问题并不复杂,但是又很多的朋友都不太了解微信网页的网址是多少,因此呢,今天小编就来为大家分享网页的网址的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录微信网页的网址是多少网页的网址是什么怎么能知道

2026年2月2日 04:45

程序设计语言是如何通过a b+1的(C语言中c=(a+b,a++,b+1);什么意思)

程序设计语言是如何通过a b+1的(C语言中c=(a+b,a++,b+1);什么意思)

其实程序设计语言是如何通过a b+1的的问题并不复杂,但是又很多的朋友都不太了解C语言中c=(a+b,a++,b+1);什么意思,因此呢,今天小编就来为大家分享程序设计语言是如何通过a b+1的的一些知识,希望可以帮助到大家,下面我们一起来

2026年6月29日 19:30

apache中国官网(中国sns交友网站排行前十名分别是什么)

apache中国官网(中国sns交友网站排行前十名分别是什么)

大家好,apache中国官网相信很多的网友都不是很明白,包括中国sns交友网站排行前十名分别是什么也是一样,不过没有关系,接下来就来为大家分享关于apache中国官网和中国sns交友网站排行前十名分别是什么的一些知识点,大家可以关注收藏,免

2025年6月30日 20:45

eclipse创建的项目在哪里(Eclipse的src文件在哪里啊)

eclipse创建的项目在哪里(Eclipse的src文件在哪里啊)

各位老铁们,大家好,今天由我来为大家分享eclipse创建的项目在哪里,以及Eclipse的src文件在哪里啊的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧

2026年8月31日 03:15

什么是函数?js正则查找match()与替换replace()用法实例

什么是函数?js正则查找match()与替换replace()用法实例

大家好,函数相信很多的网友都不是很明白,包括什么是函数也是一样,不过没有关系,接下来就来为大家分享关于函数和什么是函数的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录什么是函数js正则查找match()与替换re

2025年9月29日 19:00

中级运维工程师需要哪些证书(中级专业技术职称证书有哪些)

中级运维工程师需要哪些证书(中级专业技术职称证书有哪些)

这篇文章给大家聊聊关于中级运维工程师需要哪些证书,以及中级专业技术职称证书有哪些对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录中级专业技术职称证书有哪些网络工程师需要考什么证书中级专业技术职称证书有哪些   技术工作者在获得

2026年8月15日 07:45

powerful 音标(powerful的音标急)

powerful 音标(powerful的音标急)

大家好,如果您还对powerful 音标不太了解,没有关系,今天就由本站为大家分享powerful 音标的知识,包括powerful的音标急的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录powerful的音标急p

2026年6月10日 21:15

frameset标签的属性(在html标签中的frameset是什么标签 又有哪些属性和值)

frameset标签的属性(在html标签中的frameset是什么标签 又有哪些属性和值)

大家好,今天小编来为大家解答以下的问题,关于frameset标签的属性,在html标签中的frameset是什么标签 又有哪些属性和值这个很多人还不知道,现在让我们一起来看看吧!本文目录在html标签中的frameset是什么标签 又有哪些

2025年12月6日 02:15

enormously是什么意思英语(提高的英文单词)

enormously是什么意思英语(提高的英文单词)

各位老铁们好,相信很多人对enormously是什么意思英语都不是特别的了解,因此呢,今天就来为大家分享下关于enormously是什么意思英语以及提高的英文单词的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录提

2025年12月21日 01:00

translate最新消息(‘请以最新的信息为准’ 怎么翻译)

translate最新消息(‘请以最新的信息为准’ 怎么翻译)

大家好,translate最新消息相信很多的网友都不是很明白,包括‘请以最新的信息为准’ 怎么翻译也是一样,不过没有关系,接下来就来为大家分享关于translate最新消息和‘请以最新的信息为准’ 怎么翻译的一些知识点,大家可以关注收藏,免

2026年6月5日 08:00

电视剧绝命后卫师是历史事实?绝命后卫师演员表

电视剧绝命后卫师是历史事实?绝命后卫师演员表

今天给各位分享电视剧绝命后卫师是历史事实的知识,其中也会对电视剧绝命后卫师是历史事实进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录电视剧绝命后卫师是历史事实绝命后卫师演员表绝命后卫师苏大强的原型是谁绝命后卫师

2025年8月8日 06:45

thymeleaf使用ajax(如何在Thymeleaf中实现ajax请求url的可靠构造)

thymeleaf使用ajax(如何在Thymeleaf中实现ajax请求url的可靠构造)

其实thymeleaf使用ajax的问题并不复杂,但是又很多的朋友都不太了解如何在Thymeleaf中实现ajax请求url的可靠构造,因此呢,今天小编就来为大家分享thymeleaf使用ajax的一些知识,希望可以帮助到大家,下面我们一起

2025年6月24日 09:00

hurt怎么读(hurt怎么读)

hurt怎么读(hurt怎么读)

大家好,hurt怎么读相信很多的网友都不是很明白,包括hurt怎么读也是一样,不过没有关系,接下来就来为大家分享关于hurt怎么读和hurt怎么读的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录hurt怎么读hu

2026年2月2日 16:30

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索