概念
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.
简单的说
- 构建简单
- 减少配置(减少了spring中的web.xml application.xml spring-mvc.xml)
特点
Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
Provide opinionated ‘starter’ dependencies to simplify your build configuration
Automatically configure Spring and 3rd party libraries whenever possible
Provide production-ready features such as metrics, health checks, and externalized configuration
Absolutely no code generation and no requirement for XML configuration
- 内嵌Tomcat,Jetty或者Undertow,所以不需要打成war包部署至Tomcat
- 提供starter依赖,这一节的重点 eg:spring-boot-starter-web
- 尽可能自动配置第三方依赖
- 提供健康检查,可扩展配置
- 完全不需要配置代码或xml文件
手写starter
- 创建结构
- 添加依赖
<!--开发自定义starter必须的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
- 创建SayHello接口以及实现类
public interface ISayHello {
//方便测试只有一个方法
void sayHello();
}
import org.springframework.beans.factory.annotation.Autowired;
public class SayHelloImpl implements ISayHello {
@Autowired
private SayHelloProperties sayHelloProperties;
@Override
public void sayHello() {
//从application.xml获取spring.gao.name的值
String name = sayHelloProperties.getName();
System.out.println("你好:" + name);
}
}
- 创建读取application.yml类,模拟SpringBoot从application.yml文件读取配置
import org.springframework.boot.context.properties.ConfigurationProperties;
//自定义注解前缀为 spring.gao
@ConfigurationProperties(prefix = "spring.gao")
public class SayHelloProperties {
private String name = "xiaoming";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 创建自动配置类SayHelloAutoconfiguration,实现将SayHello注入SpringIOC
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//保证springboot启时注入IOC容器
@Configuration
@ConditionalOnClass(ISayHello.class)
@EnableConfigurationProperties(SayHelloProperties.class)
public class SayHelloAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public ISayHello getSayHello(){
return new SayHelloImpl();
}
}
- 创建META-INF目录下并创建spring.factories引入指定自动配置类
# 将加载指定的自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com/gao/cn/SayHelloAutoConfiguration
- 将依赖打包,在另一个项目导入这个依赖
mvn clean install
- 测试结果