Spring Boot 特点如下:
创建独立的 Spring 应用程序;
嵌入的 Tomcat ,无须部署 WAR 文件;
简化 Maven 配置;
自动配置 Spring;
提供生产就绪型功能,如指标、健康检查和外部配置;
绝对没有代码生成,以及对 XML 没有配置要求
首先搭建一个 maven 工程, pom 如下:
然后建立一个 controller 类
最后再加入启动整个项目的 main 函数
最后启动main函数并在浏览器中输入localhost:8080
第一个 Starter
spring starter 的出现,可以让模块开发更加独立化,相互间依赖更加松散以及可以更加方便地集成
另建一个 maven 工程 pom 如下
然后定义一个接口,可以认为它是当前独立业务开发模块对外暴露的可以直接调用的
接口,如下:
对这个接口做一个简单的实现,返回 hello 字符串:
继续追加代码,添加自动配置项:
最后一步,声明这个配置文件的路径,在 Spring 的跟路径下建立 META-INF/spring.factories 文件 ,并声明配置项路
径
修改 Web 工程,加入依赖
更改 Controller 逻辑,将模块的逻辑引入
刚才开发的 Starter 非常的方便 除了在 pom 中引入依赖
,什么都不做就可以直接使用模块内部的接口注入
探索 SpringApplication 启动 Spring
当顺着 SpringApplication.run 方法进入的时候找到了 SpringApplication 的一个看似核心
逻辑的方法
关键字眼:
SpringContext 创建
这个函数似乎没有什么特别之处,元非就是实例化一个 ApplicationContext ,因为
ApplicationContext 是 Spring 存在的基础 而对应的 SpringContext 候选类如下:
bean 的加载
继续返回追踪 prepareContext:
这里面的 load 函数是比较感兴趣的,代码如下:
Spring 扩展属性的加载
Spring Boot 的启动并不是想象的那么神秘,按照约定大于配置的原则,内
置了 Spring 原有的启动类 并在启动的时候启动及刷新,仅此而已
Starter 自动化配置原理
继续追查代码,看一看 SpringBootApplication 注解内容
注解具有传递性,EnableAutoConfiguration 是个非常特别的注解 ,它是 Spring Boot 的全局开关 ,如果把这个注解
去掉,则一切 Starter 都会失效 ,这就是约定大于配置的潜规则 那么 Spring Boot 的核心很可
能就藏在这个注解里面