快速了解SpringBoot

Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Object,POJO)实现了 EJB 的功能。

发展背景

虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的。

第一阶段:xml配置

在Spring 1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件放到不同的配置文件里,那时需要频繁的在开发的类和配置文件之间进行切换

第二阶段:注解配置

在Spring 2.x 时代,随着JDK1.5带来的注解支持,Spring提供了声明Bean的注解(例如@Component、@Service),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用xml,业务配置用注解

第三阶段:java配置

Spring 3.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,可以代替 XML。我们目前刚好处于这个时代,Spring4.x和Spring Boot都推荐使用Java配置

所有这些配置都代表了开发时的损耗

因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。

除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。

Spring Boot 让这一切成为了过去。

Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。

Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。

我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,或者采用传统的war部署方式。

核心概念

起步依赖

要理解Spring Boot起步依赖带来的好处,先让我们假设它们尚不存在。如果没用Spring Boot的话,你会向项目里添加哪些依赖呢?要用Spring MVC的话,你需要哪些依赖?

你自己脑海里同时想起了很多要添加的依赖,但是我不敢保证的是,你是否有漏掉的依赖?

不过不管怎么做,看来如果没有Spring Boot起步依赖,你就有不少功课要做。

Spring Boot通过提供众多起步依赖降低项目依赖的复杂度。

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或某类功能。

举例来说,你打算搭建一个项目做一个Web应用程序。与其向项目的构建文件

里添加一堆单独的库依赖,还不如声明这是一个Web应用程序来得简单。你只要添加Spring Boot的Web起步依赖(spring-boot-starter-web)就好了。

自动配置

spring boot除了强大的起步依赖之外,还有一个强大概念就是自动配置。

简而言之,Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。

举几个例子,下面这些情况都是Spring Boot的自动配置要考虑的。

  • Spring的DataSourceTransactionManager是不是在Classpath里?如果是,并且有DataSource的Bean,则自动配置一个DataSourceTransactionManager的Bean。
  • Spring的SqlSessionFactory是不是在Classpath里?如果是,并且有DataSource的Bean,则自动配置一个SqlSessionFactory的Bean。

每当应用程序启动的时候,Spring Boot的自动配置都要做将近200个这样的决定,涵盖安全、集成、持久化、Web开发等诸多方面。所有这些自动配置就是为了尽量不让你自己写配置。

环境准备

IDE:Eclipse Mars2

Spring-Boot:1.4.4

Maven: 3.3.3 (官方声明Springboot 1.4.4版本需要Maven 3.2+)

本地仓库:需要使用资料中的仓库

工程搭建

创建Maven工程

添加起步依赖

在pom.xml中添加依赖,效果如下

 

我们会惊奇地发现,我们的工程自动添加了好多好多jar 包,而这些jar 包正式我们做开发时需要导入的jar 包。

因为这些jar 包被我们刚才加入的spring-boot-starter-web 所引用了,所以添加spring-boot-starter-web后会自动把依赖传递过来。

变更JDK版本

我们发现默认情况下工程的JDK版本是1.6,但是通常使用的是1.7的版本

修改JDK为1.7,需要在pom.xml中添加以下配置:

<properties>

<java.version>1.7</java.version>

</properties>

使用Maven更新工程后,就发现版本已经变成1.7了

注意:

虽然JDK1.6或者1.7都可以使用Spring-Boot,但Spring-Boot官方建议使用JDK1.8。要使用JDK1.8,首先必须要配置JDK1.8后,才可以使用上述方法设置。

启动引导类

需要创建一个启动引导类:

 

@SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能。实际上,@SpringBootApplication将三个有用的注解组合在了一起。

  • Spring的@Configuration:标明该类使用Spring基于Java的配置。虽然本书不会写太多配置,但我们会更倾向于使用基于Java而不是XML的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。本章稍后会写一个简单的Spring MVC控制器,使用@Controller进行注解,这样组件扫描才能找到它。
  • Spring Boot 的@EnableAutoConfiguration : 这个不起眼的小注解就是开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。

在Spring Boot的早期版本中,你需要在Application类上同时标上这三个注解,但从Spring Boot 1.2.0开始,有@SpringBootApplication就行了。

订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x