喜文BLOG

  • 首页
  • 随笔
  • 精品资源
  • 关于

快速了解SpringBoot

快速了解SpringBoot

2019年5月8日 by ziony

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中添加依赖,效果如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<parent>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-starter-parent</artifactId>
 
<version>1.4.4.RELEASE</version>
 
</parent>
 
<groupId>cn.itcast.springboot</groupId>
 
<artifactId>itcast-springboot</artifactId>
 
<version>0.0.1-SNAPSHOT</version>
 
<dependencies>
 
<dependency>
 
<groupId>org.springframework.boot</groupId>
 
<artifactId>spring-boot-starter-web</artifactId>
 
</dependency>
 
</dependencies>

 

我们会惊奇地发现,我们的工程自动添加了好多好多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后,才可以使用上述方法设置。

启动引导类

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.boot.SpringApplication;
 
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
 
public class Application {
 
public static void main(String[] args) {
 
SpringApplication.run(Application.class, args);
 
}
 
}

 

@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就行了。

Post Views: 467

Related Posts:

  • 集群部署时的分布式 session 如何实现?集群部署时的分布式 session 如何实现?
  • 2019-3-7 随笔2019-3-7 随笔
  • Springboot2.x整合redisSpringboot2.x整合redis
  • 读取属性配置文件的五种方式读取属性配置文件的五种方式
  • springBoot 集成拦截器,踩坑总结springBoot 集成拦截器,踩坑总结
  • 密码保护:2021计划密码保护:2021计划
Posted in: SpringBoot Tagged: springboot
2021年三月
一 二 三 四 五 六 日
« 1月    
1234567
891011121314
15161718192021
22232425262728
293031  

近期文章

  • java的大文件切割-工具类 2021年1月28日
  • docker常用命令总结 2021年1月18日
  • docker更换国内的数据源 2021年1月18日
  • ReentrantLock 与Synchronized区别以及案例 2021年1月13日
  • JMeter下载及使用 2021年1月13日
  • Springboot2.x整合redis 2021年1月13日
  • SpringBoot创建多模块项目 2021年1月11日

热门文章

  • What is Thymeleaf? (8,119)
  • PhpStudy下Apache端口被占用无法打开终极解决方案 (5,094)
  • Mybatis嵌套查询和嵌套结果查询总结 (4,787)
  • FreeMarker详解 (4,197)
  • JRebel永久破解激活方法 (3,642)

分类目录

友情链接

  • 何明胜博客
  • 赵坤博客

文章归档

Copyright © 2021 喜文BLOG.

Grace WordPress Theme by SiteChurch