结合《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,咱们再来深刻的理解 Spring Boot 的工做原理。javascript
博客地址:blog.720ui.com/java
在《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,咱们了解到 Spring Boot 提供了不少开箱即用的依赖模块,开发者只要在 Maven 的 pom 文件中添加相关依赖后,Spring Boot 就会针对这个应用自动建立和注入须要的 Spring Bean 到上下文中。spring
这篇,咱们以 FreeMarker 的自动配置为例,重点讲解工做原理与加载过程。由于 FreeMarker 相对而言比较简单,Spring Boot 源码中只有三个类,因此做为案例相对而言比较好理解。springboot
你还记得 @EnableAutoConfiguration 注解么?微信
咱们先来回顾下。app
@RestController
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class WebMain {
public static void main(String[] args) throws Exception {
SpringApplication.run(WebMain.class, args);
}
}复制代码
那么,如今咱们剖析下 @EnableAutoConfiguration 的源码。
源码分析
这里的配置参数,能够经过application.properties 中直接设置。咱们发现,它的前缀必须是 spring.freemarker。
ui
在《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,有提到 @ConditionalOnClass 参数中对应的类在 classpath 目录下存在时,才会去解析对应的配置类,不然不解析该注解修饰的配置类。spa
Spring Boot 内部提供了不少自动化配置的类,例如,RedisAutoConfiguration 、MongoRepositoriesAutoConfiguration 、ElasticsearchAutoConfiguration , 这些自动化配置的类会判断 classpath 中是否存在本身须要的那个类,若是存在则会自动配置相关的配置,不然就不会自动配置,所以,开发者在 Maven 的 pom 文件中添加相关依赖后,这些依赖就会下载不少 jar 包到 classpath 中,有了这些 lib 就会触发自动化配置,因此,咱们就能很便捷地使用对于的模块功能了。3d
此外,还有一个主要的注解是 @EnableConfigurationProperties ,主要用来加载咱们上面提到的配置参数类。
第一注解是,@ConditionalOnMissingBean(name = "freeMarkerViewResolver"),指定当容器没有指定Bean的状况下的处理。
第二注解是,@ConditionalOnProperty,指定的属性是否有指定的值的处理,换句话说,若是在application.properties 没有配置,默认为 true,即条件符合。
(完)
更多精彩文章,尽在「服务端思惟」微信公众号!