Spring Boot
的使命
Spring
已经成为Java
应用程序开发框架的事实标准。它是J2EE
的轻量级替代品,通过依赖注入和面向切面编程,用简单的Java
对象(POJO
)实现了EJB
功能。虽然Spring
的组件代码是轻量级的,但它的配置却是重量级的,即使Spring2.5
引入了基于注解的组件扫描、Spring3.0
引入了基于Java
的配置,但是配置仍然是一项艰巨的任务。另外,项目的依赖管理也是一件费力不讨好并且随之而来的不兼容问题也是生产力杀手。
以上提到的Spring
开发中遇到的问题成为了Spring Boot
的使命。
Spring Boot
的核心特性
- 自动配置 : 针对很多
Spring
应用程序常见的应用功能,Spring Boot
能自动提供相关配置 - 起步依赖 : 告诉
Spring Boot
需要什么功能,它就能引入需要的库 - 命令行界面 : 这是
Spring Boot
的可选特性,借此你只需写代码就能完成完整的应用程序, 无需传统项目构建 - Actuator : 让你能够深入运行中的
Spring Boot
应用程序,一探究竟
快速创建应用(命令行方式)
1. Spring cli
安装
只需从官网下载,解压,并且配置path即可。
2. 创建项目
使用spring init -dweb,data-jpa,h2,thymeleaf --build gradle readinglist
命令,其中-d
是-denpendency
的缩写即指定所需依赖,--build
指定构建方式是maven
还是gradle
,最后指定应用名字在 项 目 创 建 完 毕 之 后 , 你 可 以 打 开 项 目 ,把
DemoApplication.java
改名为ReadingListApplication.java
初探Spring Boot
初始应用
配置和启动引导类
ReadingListApplication
是应用的配置和引导类。
package readinglist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//以下三个注解的组合:
//@Configuration(标明使用基于Java的配置)
//@ComponentScan(启用组件扫描)
//@EnableAutoConfiguration(开启Spring Boot自动配置)
public class ReadingListApplication {
public static void main(String[] args) {
SpringApplication.run(ReadingListApplication.class, args);
}
}
补充:非web类型启动
import org.springframework.boot.CommandLineRunner;
@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootConsoleApplication.class, args);
}
//access command line arguments
@Override
public void run(String... args) throws Exception {
//do something
}
}
Spring Boot
自动配置的魔法
Spring Boot
自动配置的功能由名为spring-boot-autoconfigure
的jar包提供,其核心技术就是使用了从Spring4.0
开始提供的条件化配置功能,条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。
定义条件:
package readinglist;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
try {
context.getClassLoader().loadClass(
"org.springframework.jdbc.core.JdbcTemplate");
return true;
} catch (Exception e) {
return false;
}
}
}
使用条件:
@Conditional(JdbcTemplateCondition.class)
public MyService myService() {
...
}