今天大概看了30篇的博客关于Spring-Boot大致做一个理解的结果总结
从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在 Java EE 开发中真正意义上的标准,但是随着技术的发展,Java EE 使用 Spring 逐渐变得笨重起来,大量的 XML 文件存在于项目之中。繁琐的配置,整合第三方框架的配置问题,导致了开发和部署效率的降低。
2012 年 10 月 Mike Youngstrom 在 Spring jira 中创建了一个功能请求,要求在 Spring 框架中支持无容器 Web应用程序体系结构。他谈到了在主容器引导 spring 容器内配置 Web 容器服务。这是 jira 请求的摘录:我认为Spring 的 Web 应用体系结构可以大大简化,如果它提供了从上到下利用 Spring 组件和配置模型的工具和参考体系结构。在简单的 main()方法引导的 Spring 容器内嵌入和统一这些常用 Web 容器服务的配置。
这一要求促使了 2013 年初开始的 Spring Boot 项目的研发,到今天 Spring Boot 的版本已经到了 3.2.0。Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。
它集成了大量常用的第三方库配置,Spring Boot 应用中这些第三方库几乎可以是零配置的开箱即用 out of the box,大部分的 Spring Boot 应用都只需要非常少量的 Java 配置代码,开发者能够更加专注于业务逻辑。
打开 Spring 的官方网站 http://spring.io/ 。可以看到官方对 Spring Boot 的定位:Build Anything,Build 任何东西。Spring Boot 旨在尽可能快地启动和运行,并且只需最少的 Spring 前期配置。同时也可以看到官方两个的定位:
1、SpringCloud
:Coordinate Anything
协调任何事情;
2、SpringCloud Data Flow
:Connect everything
连接任何东西。
Spring 官网对 Spring Boot
、SpringCloud
和 SpringCloud Data Flow
三者定位的措辞非常有味道,同时也可以看出,Spring 官方对这三个技术非常重视,是现在以及今后学习的重点。
1、减少开发,测试时间和努力。
2、使用 JavaConfig 有助于避免使用 XML。
3、避免大量的 Maven 导入和各种版本冲突。
4、提供意见发展方法。
5、通过提供默认值快速开始开发。
6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish 或其他任何东西。
7、需要更少的配置因为没有 web.xml 文件。只需添加用 Configuration 注释的类,然后添加用 Bean 注释的方法,Spring 将自动加载对象并像以前一样对其进行管理。您甚至可以将 Autowired 添加到 bean 方法中,以使Spring 自动装入需要的依赖关系中。
8、基于环境的配置使用这些属性,可以将正在使用的环境传递到应用程序:例如命令行参数配置值为-Dspring.profiles.active={enviornment} 。 在 加 载 主 应 用 程 序 属 性 文 件 后 Spring 将 在(application-{environment}.properties)中加载后续的应用程序属性文件。
Spring Boot 是伴随着 Spring 4.0 诞生的,从字面理解,Boot 是引导的意思,因此 Spring Boot 旨在帮助开发者快速搭建 Spring 框架。Spring Boot 继承了原有 Spring 框架的优秀基因,使 Spring 在使用中更加方便快捷。
举个例子,如要创建一个 web 项目,使用 Spring 的人都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中只需要在 pom 文件中添加一个 starter-web 依赖即可。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
点击进入该依赖后可以看到,Spring Boot 这个 starter-web 已经包含了多个依赖,包括之前在 Spring 工程中需要导入的依赖
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<scope>compilescope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<scope>compilescope>
dependency>
由此可以看出,Spring Boot 大大简化了编码,不用一个个导入依赖,直接一个依赖即可。
Spring 虽然使 Java EE 轻量级框架,但由于其繁琐的配置,一度被人认为是配置地狱。各种 XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot 更多的是采用 Java Config的方式,对 Spring 进行配置。
新建一个类但是不用@Service 注解,也就是说,它是个普通的类,那么如何使它也成为一个 Bean 让 Spring去管理呢?只需要@Configuration 和@Bean 两个注解即可
public class TestService {
public String sayHello () {
return "Hello Spring Boot!";
}
}
对应的配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JavaConfig {
@Bean
public TestService getTestService() {
return new TestService();
}
}
@Configuration 表示该类是个配置类,@Bean 表示该方法返回一个 Bean。这样就把 TestService 作为 Bean 让Spring 去管理了,在其他地方如果需要使用该 Bean,和原来一样,直接使用@Resource 注解注入进来即可使用,非常方便。
@Resource
private TestService testService;
另外部署配置方面,原来 Spring 有多个 xml 和 properties 配置,在 Spring Boot 中只需要个 application.yml即可。