问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SpringBoot入门-自动配置详解

发布网友 发布时间:2022-10-13 06:48

我来回答

1个回答

热心网友 时间:2023-10-31 18:56

通过查看SpringBootApplication的源码,会发现这是一个组合注解,其中最重要的注解是@EnableAutoConfiguration

先看@AutoConfigurationPackage这个注解

里面导入了一个Registrar类,这个类实现了bean的扫描与注册,那它扫描的是哪个包呢?

只要看PackageImports这个类,会发现如果没有用@ComponentScan指定包名,他默认扫描的是启动类的包名,比如你的启动类是cn.hollycloud.App,它扫描的就是cn.hollycloud

再来看AutoConfigurationImportSelector这个类,这个类用来加载所有的自动配置项

通过上面的源码我们知道spring把所有配置项都导进来了,但我们并不需要所有的功能。比如说我开发的时候并不需要mongodb相关功能,但spring也会把相关配置项加载进来,怎么关闭该功能呢?看下mongodb的自动配置源码

重点是@ConditionalOnClass(MongoClient.class),这个的意思是只有类路径中存在MongoClient.class,也就是我们导入mongo相关依赖,这个配置项才会开启,否则不会注册这个bean。

同时我们看下面有个MongoClient的bean,spring很贴心地为我们初始化好了mongo的客户端,我们直接使用就行了,如果想自定义客户端怎么办呢?也很简单,直接自己初始化一个mongo客户端放入spring容器就行了,@ConditionalOnMissingBean的意思是如果你没有自定义客户端它才会自己生成一个,是不是很方便,这个叫条件化注解

现在我们来实现一个简单的自动配置类来巩固下。

可以想象一下我们是一家机器人公司,专门制造高端机器人,很受客户欢迎,但是配置机器人过于复杂,这点老是被客户诟病,你的领导想让你提供给客户开机即用的产品,该如何实现呢?

首先我们创建一个机器人控制终端,这是控制终端可以操控机器人说话

接下来是自动配置项,可以自动注册配置终端

我们想要给客户一点自由,可以让客户自由配置机器人的名字和颜色,而不用管机器内部复杂的操作

接下来最重要的一步是把自动配置项放到类路径的/META-INF/spring.factories里面

然后客户直接引用你提供的依赖就能直接控制机器人了,而不用管复杂的初始化操作

来控制机器人说话吧,直接注入robot就能使用了,不需要客户关心复杂的初始化操作了

如果客户想为机器人改个名字也很简单,直接在application.yml配置下就行了

这个例子虽然很简单,但是说明了自动配置的工作原理,spring内置的自动配置虽然复杂,但原理都一样的。

参考代码: https://gitee.com/huatin/java-test 下的AutoConfigTest模块
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
邯郸自驾游到青岛马壕运河遗址推荐线路 株洲自驾到青岛马壕运河遗址途径地方 梧州回青岛马壕运河遗址要几个小时 石嘴山到青岛马壕运河遗址要多少油钱 可不可以用开水敷脸 开水能不能敷脸 发动机和发电机区别?? 电音之王朴智妍MV的图片? 电音之王mv里跳舞的是谁 自己怎样开网站 怎样把一个网页设置为主页 读取Springboot的三种方式 开了瓶的过夜啤酒还能喝吗 开了瓶的啤酒如何保存 取名露兰有合含义 我的寒假优秀作文 14代轩逸换氛围灯和四门隔音2500贵吗? 广州一特斯拉撞树后自燃,为何特斯拉频频出事故? 特斯拉回应广州致1死事故,现场发生了什么? 广州特斯拉交付到多少号了 东方证券为什么还涨停?东方证券年报最新排名?为啥都不看好东方证券? 怎么样使自己的产品上百度百科 所有能登上百度百科的简介都是正规公司出来的吗 百度百科上说的产品都是正规的吗? 百度百科上的所有东西都可靠吗?正确率是多少?具有权威性写? 想问下各位上了百度百科有什么好处吗?某些东西上了百度百科必须有亮点才能上?是不是不能随便上呢? 一般上了百度百科的东西都很有知名度吗? 一个人该怎么养老? 宝宝还不满月刚买一个衣柜味很大怎么除味 同是轴心国元首,为何墨索里尼和希特勒丧命,裕仁天皇安然无恙 墨索里尼为什么头部变形? 在驰布阁卖号安全吗 鸡蛋松糕的做法大全 这样做比较好吃 鸡蛋松糕的家常做法大全怎么做好吃视频 到底是当营长好呢还是当所长好 求《来自星星的你》中插曲《再见》—孝琳,的吉他谱和钢琴五线谱!!!求好心人帮忙!!! 能将 来自星星的你 再见 的吉他谱发一份给我吗???我找了好久都没找到 没有罗马歌词 只有音译歌词啊亲 ——————金孝琳-再见(来自星星的你OST)—————— 谁有《来自星星的吉他曲》这本书中晴天的吉他谱,求分享感谢!(图中这本书) 来自星星的你 都教授求婚 唱的 《约定》 吉他谱 尔冬晨的夏花秋叶有没有拍成电视剧 有一本书,叫什么秋叶谁知道 给宝宝娶名字! 租赁自住住房提取什么意思 没提取过公积金为何显示本年已进行过租房提取- 问一问 支付宝无房租赁提取去年五月份提取一次今年一月份还可以提取吗? 北京哪里修雷蒙威手表比较专业 天津蕾蒙威手表去哪维修 腐乳的好处 腐乳的好处有哪些 雷蒙威手表维修中心在哪?我的手表受磁了。 腐乳的功效与作用 腐乳益处有哪些 豆腐乳吃了有什么好处