我们了解到 Spring Boot 提供了很多开箱即用的依赖模块,开发者只要在 Maven 的 pom 文件中添加相关依赖后,Spring Boot 就会针对这个应用自动创建和注入需要的 Spring Bean 到上下文中。

这篇,我们以 FreeMarker 的自动配置为例,重点讲解工作原理与加载过程。因为 FreeMarker 相对而言比较简单,Spring Boot 源码中只有三个类,所以作为案例相对而言比较好理解。

图片

EnableAutoConfiguration 帮助我们做了什么

你还记得 @EnableAutoConfiguration 注解么?

我们先来回顾下。

@RestController@EnableAutoConfiguration@ComponentScan(basePackages = { "com.lianggzone.springboot" })public class WebMain {    public static void main(String[] args) throws Exception {        SpringApplication.run(WebMain.class, args);    }}

那么,现在我们剖析下 @EnableAutoConfiguration 的源码。

图片

这里,关键在于 @Import 注解导入的 EnableAutoConfigurationImportSelector 类中最为关键的是 getCandidateConfigurations 方法中通过 SpringFactoriesLoader.loadFactoryNames 扫描 spring.factories 文件。

图片

现在,我们在来看下 SpringFactoriesLoader 源码。

图片

突然,你是不是发现 spring.factories 文件是相当重要呢?对的,Spring Boot 通过扫描这个文件中的内容,判断有哪些自动配置。以 FreeMarker 为例,我们来看下它是如何配置的。

图片

所以,Spring Boot 通过扫描 spring.factories 文件中的 EnableAutoConfiguration 参数中有哪些自动配置并进行加载。

配置参数类 – FreeMarkerProperties

这里的配置参数,可以通过application.properties 中直接设置。我们发现,它的前缀必须是 spring.freemarker。

图片

自动配置类 – FreeMarkerAutoConfiguration

核心注解

图片

@ConditionalOnClass 参数中对应的类在 classpath 目录下存在时,才会去解析对应的配置类,否则不解析该注解修饰的配置类。

Spring Boot 内部提供了很多自动化配置的类,例如,RedisAutoConfiguration 、MongoRepositoriesAutoConfiguration 、ElasticsearchAutoConfiguration , 这些自动化配置的类会判断 classpath 中是否存在自己需要的那个类,如果存在则会自动配置相关的配置,否则就不会自动配置,因此,开发者在 Maven 的 pom 文件中添加相关依赖后,这些依赖就会下载很多 jar 包到 classpath 中,有了这些 lib 就会触发自动化配置,所以,我们就能很便捷地使用对于的模块功能了。

此外,还有一个主要的注解是 @EnableConfigurationProperties ,主要用来加载我们上面提到的配置参数类。

注入 Bean

图片

这个源码非常好理解,我主要想讲2个注解。

第一注解是,@ConditionalOnMissingBean(name = “freeMarkerViewResolver”),指定当容器没有指定Bean的情况下的处理。

第二注解是,@ConditionalOnProperty,指定的属性是否有指定的值的处理,换句话说,如果在application.properties 没有配置,默认为 true,即条件符合。


更多相关文章

  1. 在jquery下翻看图片,如何判断最后一张呢?
  2. Jquery 特效 图片轮转 菜单
  3. ajax cache false无法加载图片
  4. jquery 插件bgStretcher 切换背景图片
  5. 我做的第一个JQuery图片切换,希望大家多多指教。
  6. jQuery图片热点链接添加编辑插件
  7. jquery手指触摸滑动放大图片的方法(比较靠谱的方法)
  8. jquery 图片放大效果
  9. jquery Loading图片延迟加载特效

随机推荐

  1. Android笔记(9)---Fragment的生命周期以及
  2. Android4.X物理按键监听
  3. Android VR入门文章
  4. Android Handler处理机制 ( 一 )(图+源码
  5. (转)当Note2遇上NFC
  6. 美女开发者独立开发二十多款应用,月入上万
  7. 在截击中从响应中获得头球
  8. Android实战技巧之十一:Android Studio和G
  9. [深入理解Android卷一全文-第六章]深入理
  10. 按下子活动后退按钮后,Android主要活动的