范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringBoot的自动配置原理

  使用SpringBoot之后,一个整合了SpringMVC的WEB工程开发,变的无比简单,那些繁杂的配置都消失不见了,这是如何做到的?
  一切魔力的开始,都是从我们的main函数来的,所以我们再次来看下启动类:
  我们发现特别的地方有两个:注解:@SpringBootApplicationrun方法:SpringApplication.run()
  我们分别来研究这两个部分。了解@SpringBootApplication
  点击进入,查看源码:
  这里重点的注解有3个:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan
  4.1.1.@SpringBootConfiguration
  通过这段我们可以看出,在这个注解上面,又有一个@Configuration注解。通过上面的注释阅读我们知道:这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,并且读取其中的配置信息。而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。
  4.1.2.@EnableAutoConfiguration
  关于这个注解,官网上有一段说明:The second class-level annotation is @EnableAutoConfiguration. This annotation
  tells Spring Boot to "guess" how you want to configure Spring, based on the jar
  dependencies that you have added. Since spring-boot-starter-web added Tomcat
  and Spring MVC, the auto-configuration assumes that you are developing a web
  application and sets up Spring accordingly.
  简单翻译以下:
  第二级的注解@EnableAutoConfiguration,告诉SpringBoot基于你所添加的依赖,去"猜测"你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
  总结,SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。
  所以,我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了。除非你不希望使用SpringBoot的默认配置,它也提供了自定义配置的入口。
  4.1.3.@ComponentScan
  我们进源码
  并没有看到什么特殊的地方。我们查看注释:
  大概的意思:配置组件扫描的指令。提供了类似与标签的作用
  通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
  而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。默认配置原理:
  4.2.1默认配置类
  通过刚才的学习,我们知道@EnableAutoConfiguration会开启SpringBoot的自动配置,并且根据你引入的依赖来生效对应的默认配置。那么问题来了:这些默认配置是在哪里定义的呢?为何依赖引入就会触发配置呢?
  其实在我们的项目中,已经引入了一个依赖:spring-boot-autoconfigure,其中定义了大量自动配置类:
  还有
  非常多,几乎涵盖了现在主流的开源框架,例如:redisjmsamqpjdbcjacksonmongodbjpasolr
  elasticsearch
  我们来看一个我们熟悉的,例如SpringMVC,查看mvc 的自动配置类:
  打开WebMvcAutoConfiguration:
  我们看到这个类上的4个注解:@Configuration:声明这个类是一个配置类@ConditionalOnWebApplication(type = Type.SERVLET)ConditionalOn,翻译就是在某个条件下,此处就是满足项目的类是是Type.SERVLET类型,也就是一个普通web工程,显然我们就是@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })这里的条件是OnClass,也就是满足以下类存在:Servlet、DispatcherServlet、WebMvcConfigurer,其中Servlet只要引入了tomcat依赖自然会有,后两个需要引入SpringMVC才会有。这里就是判断你是否引入了相关依赖,引入依赖后该条件成立,当前类的配置才会生效!@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)这个条件与上面不同,OnMissingBean,是说环境中没有指定的Bean这个才生效。其实这就是自定义配置的入口,也就是说,如果我们自己配置了一个WebMVCConfigurationSupport的类,那么这个默认配置就会失效!
  接着,我们查看该类中定义了什么:
  视图解析器
  处理器适配器(HandlerAdapter)
  还有很多,这里就不一一截图了。
  4.2.2.默认配置属性
  另外,这些默认配置的属性来自哪里呢?
  我们看到,这里通过@EnableAutoConfiguration注解引入了两个属性:WebMvcProperties和ResourceProperties。这不正是SpringBoot的属性注入玩法嘛。
  我们查看这两个属性类:
  找到了内部资源视图解析器的prefix和suffix属性。
  ResourceProperties中主要定义了静态资源(.js,.html,.css等)的路径:
  如果我们要覆盖这些默认属性,只需要在application.properties中定义与其前缀prefix和字段名一致的属性即可。4.3.总结
  SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个:你引入了相关依赖你自己没有配置
  1)启动器
  所以,我们如果不想配置,只需要引入依赖即可,而依赖版本我们也不用操心,因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。
  因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器,参考课前资料中提供的《SpringBoot启动器.txt》
  2)全局配置
  另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义application.properties文件来进行覆盖。这样虽然使用的还是默认配置,但是配置中的值改成了我们自定义的。
  因此,玩SpringBoot的第二件事情,就是通过application.properties来覆盖默认属性值,形成自定义配置。我们需要知道SpringBoot的默认属性key,非常多,参考课前资料提供的:《SpringBoot全局属性.md》

最新,一加Ace(天玑8100)发布时间定了新机一加Ace发布会要来了,时间定于4月21日19点,届时会在线上举行,有兴趣的小伙伴们可以去看看。一加Ace将会提供开黑以及回蓝这两个配色,后置三摄模组,直角金属中框(其实跟之前狗狗币(DOGE)价格因埃隆马斯克的推特提案而上涨在教父埃隆马斯克提出以430亿美元收购Twitter之后,世界上最大的meme加密货币狗狗币(DOGE)周四在短短几分钟内飙升了5以上。马斯克最近成为Twitter的最大股东,持有新能源3月月报新能源汽车渗透率超25汽车新能源3月月报新能源汽车渗透率超25投资要点行业景气度跟踪疫情因素影响下,3月批发同比1。6。乘联会口径3月狭义乘用车产量实现182。3万辆(同比0。3,环比22。0),批发销智慧能源新赛道哪吒汽车走得很稳!1月8日,哪吒汽车第10万台量产车下线仪式在浙江桐乡举行,中国科学院院士欧阳明高受邀出席并发表了以智慧能源为主题的宣讲。欧阳明高院士从动力电池整车平台车网互动与智慧能源三个方面,分从德国开到法国梅赛德斯电动汽车EQXX电池续航能力突破1000公里今年一月,华尔街见闻文章提及,德国高端汽车制造商梅赛德斯宣布其VISIONEQXX原型汽车每次充电的续航里程将突破1000公里关口,当时金融时报引援公司的评价迄今为止最高效的电动汽新能源汽车成长的烦恼如何解专家访谈新能源汽车成长的烦恼如何解光明日报记者姚亚奇今年以来,新能源汽车呈高速增长态势。然而,新能源汽车发展中还面临一些成长的烦恼。哪些短板亟须补齐?如何稳定发展态势?对此,记者专iPhoneSE3在中国销量惨淡,而日本市场却卖爆,这是什么现象?2022年4月6日,日本调研公司BCN发布统计数据,3月18日开售的iPhoneSE3因价格低廉,成功地提振了苹果手机在日本销量,初期销售表现远优于前两代iPhoneSE机型。可是长安汽车欲以新能源车换道超车朱华荣称要做国际化品牌本报记者龚梦泽中国品牌迎来最佳换道并行甚至超车机遇,中国品牌不是旁观者或跟随者,而是并跑者,甚至是引领者。未来十年,全球一定会诞生世界级的中国品牌。在4月13日长安汽车全球伙伴大会有性能有颜值,这样的iPhone14Pro,iPhone6s用户心动吗?2022年,还在用iPhone6s的朋友们,会面临着一个换新机的问题。哪怕主观上觉得iPhone6s仍能继续用,但从客观角度来说iPhone6s这款手机确实已经到了该退休的阶段。比销量反超头部造车新势力,传统车企突围新能源赛道以特斯拉和造车新势力主导的新能源汽车市场格局,似乎正在被传统车企旗下的纯电新品牌搅局。进入4月以来,自主车企纷纷发布一季度产销数据,广汽埃安新能源汽车销量首次突破两万辆,上汽通用五消费者投诉倍思充电器不符合苹果协议无法正常使用,且产品质量出现问题客服不理会DoNews4月15日消息(张佳)日前,有消费者在黑猫投诉平台投诉称,倍思充电器因系统升级导致充电协议无法匹配手机无法充电,产品无法使用,另有消费者称,倍思产品存在质量问题,客服未
十三香预售秒光,黄牛们又赢了一次?9月15日,苹果发布了新一代iPhone13,并于17日20时开启预售,24日正式发售。值得注意的是,在iPhone13预售当晚,官方以及第三方电商平台均出现秒光的现象,官网甚至曾实话实说这4件家电没必要买贵的高端货!普通款足够用了到现在,还有很多人认为家电一分价钱一分货,买贵的也不买便宜货!其实,现在家电市场趋于饱和,市面上比较知名的品牌,在制造和做工上存在的差异越来越小,顶多在功能上有点偏差,若再以价格定闲置电脑再利用可道云前面几篇我们分别介绍了闲置电脑如何利用闲置电脑再利用如何安装NAS闲置电脑再利用安装NAS系统如何配置NAS闲置电脑再利用配置NAS系统以及如何配置离线下载闲置电脑再利用离线下载本实测微信互联互通情况分亲疏,划等级,不同产品待遇不同在工信部多次要求打开外链屏蔽后,踩着9月17日最终时限的微信终于宣布有条件开放,比如微信要升级到最新版本只在一对一聊天中场景放开复制链接功能。实测发现,微信针对不同应用,提供截然不个人微信企业微信的区别对比,12亿推广费身份的不同企业微信和个人微信有一个很大的区别,就是企业品牌的展示。企业微信自带一个品牌的小尾巴,当用户初次添加你时,企微自带的品牌名可以帮助你与用户快速建立信任,即使以后用户忘记了全球供应链未来新趋势1,搭上区块链技术这趟特快列车供应疼痛大流行病的爆发减少了全球货物的流动。货物在港口的呆滞是COVID19大流行的特殊副作用,这种供需不匹配使得各国制造商不得不等待数月才能生产或组装原材料和零部件。随着COVI冰箱十大品牌是哪些啊?根据全国家用电器工业信息中心最新发布的20202021年度中国家用电器行业品牌评价结果,冰箱行业十强品牌为海尔美的美菱西门子卡萨帝海信容声TCL博世奥马,您可以作为参考。20202更适合中国家庭!全新美的W11会洗拖布机器人详细评测评内容来源微信公众号作者差评开头一最近美的新发布的美的会洗拖布机器人,不仅搭载了ToF导航技术,扫拖全能,而且还坐拥了AutoWash自动回洗拖布AutoRaise自动滚刷抬升,自鸿蒙首款生态产品!MaiboboRBP2400轻松监测血压健康A众所周知,困扰人们最普遍的健康问题就是血压的升高,不仅比较难以治愈,而且越来越低龄化,就如笔者单位就有不少3040岁的同事有此困扰,着实不得不令人担忧。因此也是很多家庭都常备血压刚上手,iPhone13就发现新Bug,你遇到了吗?从iOS14。5开始,我们知道,iOS14。5(watchOS7。4)提供了用AppleWatch解锁功能,通过连接iPhone和AppleWatch,即使戴着口罩也能解锁iPho刚刚拿到iPhone13就发现bug?为啥每次新机都出问题?iPhone13值不值得买根据每日经济新闻的报道,24日,iPhone13系列正式发售,不少网友在收到手机后就迫不及待地分享了开箱视频。然而就在发售日当天,部分消费者反映收到的手机