你的位置:首页 > 软件开发 > Java > 一步步学习SpringBoot(二) @EnableAutoConfiguration

一步步学习SpringBoot(二) @EnableAutoConfiguration

发布时间:2017-03-28 00:01:34
适应读者前端工程师(java系的公司)前端架构师(java系的公司)java工程师测试工程师(java系的公司)全栈工程师回顾  上篇文章我们熟悉了SpringBoot的开发环境并且通过几行代码发布了一个web服务,相信大家已经对SpringBoot有了一个基本的了解,很多同学 ...

一步步学习SpringBoot(二)  @EnableAutoConfiguration

适应读者

  • 前端工程师(java系的公司)
  • 前端架构师(java系的公司)
  • java工程师
  • 测试工程师(java系的公司)
  • 全栈工程师

回顾

  上篇文章我们熟悉了SpringBoot的开发环境并且通过几行代码发布了一个web服务,相信大家已经对SpringBoot有了一个基本的了解,很多同学看了上篇文章私信我,大部分是惊讶SpringBoot简洁高效的同时又担心如果在公司使用它会有怎样的成本与风险,SpringBoot是 spring.io这几年推广的重点,而且现在流行的SpringCloud解决的是以SpringBoot单个服务应用为基础的多个微服务治理与整合的问题,SpringBoot在复用SpringMVC诸多特性的同时解决了SpringMVC配置繁琐的问题,所以熟悉SpringMVC的同学能快速地过渡到SpringBoot,而不熟悉SpringMVC的同学也可以直接跳过SpringMVC直接学习SpringBoot,本篇我们会给大家介绍SpringBoot的默认配置是怎么玩的。

先看看Main Class的注解@SpringBootApplication

  细心的同学应该能记得main class的注解是@SpringBootApplication ,可以查下它的源代码

  一步步学习SpringBoot(二)  @EnableAutoConfiguration

 在这里我们可以看到

@SpringBootApplication 里面几个重要的注解 @EnableAutoConfiguration @ComponentScan

@EnableAutoConfiguration:

这个注解可以自动载入应用程序所需要的所有Bean,我们继续查看源代码

一步步学习SpringBoot(二)  @EnableAutoConfiguration

看到最重要的一个是@Import(EnableAutoConfigurationImportSelector.class),该类继承了AutoConfigurationImportSelector,仔细读了下AutoConfigurationImportSelector的源代码,

一步步学习SpringBoot(二)  @EnableAutoConfiguration

 读到重点,我们会通过SpringFactoriesLoader去查询META-INF/spring.factories文件,spring应该通过spring.factories来初始化里面对应类,继续好奇,在github上很方便可以查到。https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories,部分截图如下:

一步步学习SpringBoot(二)  @EnableAutoConfiguration

在这里可以很清楚的看到@EnableAutoConfiguration其实是引入了spring.factories里面的所有配置,这些配置就是SpringBoot实现最亮点的地方:规约大于配置:这些配置的实现类大都定义了默认值,从而让开发同学只用去关心自己想配置的部分,这里我们再继续好奇下去选列表中的一个自动配置类RedisAutoConfiguration看下,从命名来看应该是redis的配置。

一步步学习SpringBoot(二)  @EnableAutoConfiguration 

这里@EnableConfigurationProperties自动映射一个POJO到Spring Boot配置文件(默认是application.properties文件)的属性集,这个POJO就是RedisProperties.class,我们继续看下这个类做了什么事情,看看部分代码截图,

一步步学习SpringBoot(二)  @EnableAutoConfiguration

看到这里我们就懂了,这里面@ConfigurationProperties是将pojo的属性关联到前缀“spring.redis”, 这是比较好的开发方式,后续如果自定义的配置我们也可以效仿这种做法,整体将这个类映射到application.properties就会类似:

     spring.redis.database =0,

              spring.redis.port = 6379,

以上这些都是SpringBoot的默认配置, 如果我们想改成实际的配置,我们只用在resource/application.properties里面设置spring.redis.port =【新的端口】即可。

总结

我们通过了一系列的源码分析终于知道了@EnableAutoConfiguration是怎么运作的了,其实是这个注解去查询META-INF/spring.factories,这里面列出了所有的SpringBoot的默认配置,包含了server,dao,data,aop等等所有web应用需要用到的特性,并且将这些特性对应的pojo自动映射到application.properties上,在这次源码分析中我们不断了解了SpringBoot的自动配置运作原理,还从这些源代码学习到了很多的开发技巧,也许有些同学觉得源代码有些枯燥,但这是我向推荐大家的一种新技术学习方法,先学会怎么使用,再通过源代码来深入了解它的运作机制,这样既可以加深你对它的了解更能驾驭它,你也能在牛人的源代码里面学到很多开发技巧,也许有一天你也能开发一个框架贡献给千万开发者使用。

如想了解更多技术,请关注我的微信公众号。

一步步学习SpringBoot(二)  @EnableAutoConfiguration

 

 

      

 

   


 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:一步步学习SpringBoot(二) @EnableAutoConfiguration

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录