SpringBoot简化了Spring应用程序开发
Spring 历史:
Spring 诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级替代品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了简单方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能。
虽然Spring的组建代码是轻量级的,但是配置却是重量级的。
Spring2.5引入了基于注解的组建扫描,Spring3.0引入了基于Java的配置。
SpringBoot的核心:
- 自动配置:针对Spring应用程序的常见应用功能,SpringBoot能够自动提供相关配置。
- 起步依赖:告诉SpringBoot需要什么功能,它就能引入什么库。
- 命令行界面:可选特性,无需传统的项目构建,只需写代码就能完成完整的应用程序。
- Actuator:能够深入到运行中的Spring应用程序,窥探应用程序内部情况。
使用Spring Initial初始化Spring Boot项目
几种用法:
- 通过Web界面使用:http://start.spring.io
- 通过Spring Tool Suite使用:http://spring.io/tools/sts下载。
- 通过IntelliJ IDEA使用
- 使用Spring Boot CLI使用
第一个SpringBoot应用程序
使用IntelliJ IDEA创建SpringBoot项目:
file->new project->左侧栏选择Spring Initial
项目结构:
项目结构解释:
- build.gradle:Gradle构建说明文件。
- SpringbootFirstappApplication.java:应用程序的启动引导类,也是主要的Spring配置类。
- application.properties:用于配置应用程序和Spring boot的属性。
- SpringbootFirstappApplicationTest.java:一个基本的集成测试类。
SpringbootFirstappApplication.java(启动引导类,配置类)
代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootFirstappApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootFirstappApplication.class, args);
}
}
@SpringBootApplication:开启了组件扫描和SpringBoot的自动配置功能。
@SpringBootApplication将3个有用的注解结合在一起
Spring的@Configuration:标明该类使用Spring基于Java的配置。
Spring的@ComponentScan:启用组件扫描,这样程序中的Web控制器和其他组件才能被自动发现并且注册为Spring应用程序上下文中的Bean。
Spring Boot的@EnableAutoConfiguration:开启SpringBoot的自动配置。application.properties:Initializr为你生成的application.properties文件是一个空文件。可以删除,不会对程序有任何影响。也可以在文件中添加条目,细粒度的调整Spring Boot的自动配置。完全不用告诉Spring Boot为你加载application.properties,只要它存在就会被加载,Spring和应用程序都能获取其中的属性。
运行项目:使用命令行运行项目,右键运行Application.java,配置Tomcat Local Server。
使用命令行:
gradle:$gradle bootrun
maven:spring-boot:run
Spring Boot项目构建
构建工具:
- Maven
- Gradle
Spring Boot 起步依赖
Spring Boot 通过提供众多的起步依赖来降低项目依赖的复杂度。
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加载一起即支持某项功能。
通过添加起步依赖,替换向项目构建文件里添加一堆单独的库依赖。
指定基于功能的依赖: 比如:做一个Web应用程序。只需要添加Spring Boot 的Web起步依赖即可。它声明的依赖也会被传递依赖进来。
覆盖,移除,指定起步依赖引入的传递依赖:通过构建工具中的功能,选择性的覆盖它们引入的传递依赖的版本号,排除传递依赖,为SpringBoot起步依赖没有涵盖的库指定依赖。使用时要小心,避免出现兼容性问题
1.移除传递依赖Gradle:
compile("org.springframework.boot:spring-boot-starter-web"){excluede group:'com.fasterxml.jackson.core'}
Maven:
<dependency><goupId>org.springframework.boot</goupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId></exclusion></exclusions></dependency>
2.覆盖依赖:
指定依赖版本号,起步依赖本身版本是由正在使用的SpringBoot的版本决定的,而起步依赖会决定它们引入的传递依赖的版本。
Spring Boot自动配置
Spring Boot自动配置承担起了配置Spring的重任,因此你能专注于编写自己的应用程序。
Spring Boot利用条件化注解配置实现自动配置:
例子:
@Conditional(JdbcTemplateCondition.class)
public MyService myService(){
...
}
在这个例子中,只有当JdbcTemplateCondition类的条件成立时才会创建MyService这个Bean。也就是说MyService Bean创建的条件是ClassPath中有JdbcTemplateCondition,否则这个Bean的声明就会被忽略掉。
SpringBoot提供的条件化注解:
这篇文章后将会介绍和总结Spring Boot的更多内容!