本篇学习目标

  • Spring Boot是什么?
  • 构建Spring Boot应用程序
  • 三分钟开发SpringBoot应用程序 本章源码下载

Spring Boot是什么?

spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

  • Spring的目标是致力于全方位简化Java开发
  • SpringBoot是简化Spring开发

我们来探讨一下一个标准的Spring程序我们需要该做什么?

  • 标准项目结构,以及必要的依赖
  • web.xml文件(或一个WebAPplicationInitializer实现)
  • Spring的相关配置
  • Controller控制器
  • WEB应用服务器(Tomcat)

我们可以发现只有一个Controller是和我们的业务相关的,其他的都是Spring开发Web应用程序的通用模板,而SpringBoot就能让你只写控制器即可,剩下的全都交给SpringBoot即可,下面我们一起来看一下SpringBoot是如何简化Spring开发的

SpringBoot如何简化Spring开发的?

  • 起步依赖 : 告诉SpringBoot需要什么功能,它就能引入相关依赖
  • 自动配置 : 针对Spring常见功能自动提供相关配置
  • 命令行界面 : 编写部分代码就可以运行程序
  • Actuator : 能让你深入到运行中的SpringBoot一探究竟

构建SpringBoot应用程序

构建SpringBoot项目,有很多种方法,例如下面所示,你可以使用任何一种方法构建SpringBoot项目

下面是使用web界面构建SpringBoot项目示例图,另外几种方式不再一一累述

三分钟开发SpringBoot应用程序

现在我们要花上三分钟创建一个小的应用程序,是一个类似待办事项的小应用,从这个应用程序中,我们就能感受到SpringBoot的起步依赖和自动配置的强大魅力 本章源码下载

  1. 创建一个BOOK(实体类)
  2. 创建一个Repository(仓库接口)
  3. 创建一个Controller(控制器)

Book实体

@Entity
public class Book { @Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String reader;
private String isbn;
private String title;
private String author;
private String description; getter and setter .....
}

仓库接口

@Repository
public interface ReadingListRepository extends JpaRepository<Book, Long> { List<Book> findByReader(String reader); }

控制器

@Controller
@RequestMapping("/readingList")
public class ReadingListController { private static final String reader = "jimisun"; @Autowired
private ReadingListRepository readingListRepository; @RequestMapping(method = RequestMethod.GET)
public String readersBooks(Model model) { List<Book> readingList = readingListRepository.findByReader(reader);
if (readingList != null) {
model.addAttribute("books", readingList);
}
return "readingList";
} @RequestMapping(method = RequestMethod.POST)
public String addToReadingList(Book book) {
book.setReader(reader);
readingListRepository.save(book);
return "redirect:/readingList";
} }

前端html

......

启动SpringBoot项目,访问 http://localhost:8080/readingList

刚才发生了什么?

我们不是要进行配置一些类的配置吗?NO NO NO,使用SpringBoot让配置成为了过去,SpringBoot的自动配置(利用Spring的条件化配置)担任起了配置Spring的重任

  • 因为ClassPath里有H2,所以会创建一个H2数据库的Bean,JPA实现需要它访问数据库
  • 因为ClassPath里有Hibernate(Spring Data JPA传递引入的)实体管理器,所以自动配置会配置与Hibernate有关的Bean
  • 因为ClassPath里有Spring Data JPA,所以会根据仓库的接口创建仓库的实现
  • 因为ClassPath里有Spring MVC(Web的起步依赖引入的),所以会配置Spring的DispatcherServlet并启用Spring MVC
  • 因为ClassPath里有Tomcat(Web起步依赖引入的),所以会启动一个嵌入式的Tomcat容器,监听8080端口
  • ......

我们可以看到,得益于SpringBoot的起步依赖和自动配置,我们几乎不用做任何配置,但是在某些场景下自动配置可能并不如意,或者你需要另外一种配置,该怎么办? Java工程师之SpringBoot系列教程将为您详细揭晓SpringBoot神秘面纱

该教程所属Java工程师之SpringBoot系列教程,本系列相关博文目录 Java工程师之SpringBoot系列教程前言&目录

SpringBoot系列教程起步的更多相关文章

  1. Java工程师之SpringBoot系列教程前言&目录

    前言 与时俱进是每一个程序员都应该有的意识,当一个Java程序员在当代步遍布的时候,你就行该想到我能多学点什么.可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代.但 ...

  2. springBoot系列教程07:异常捕获

    发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事 所以处理异常时,最基本的要求就是发生异 ...

  3. SpringBoot系列教程web篇之过滤器Filter使用指南

    web三大组件之一Filter,可以说是很多小伙伴学习java web时最早接触的知识点了,然而学得早不代表就用得多.基本上,如果不是让你从0到1写一个web应用(或者说即便从0到1写一个web应用) ...

  4. SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver

    关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理: 本篇博文则带来另外一种并不常见的使用方式,通过实 ...

  5. SpringBoot系列教程web篇之全局异常处理

    当我们的后端应用出现异常时,通常会将异常状况包装之后再返回给调用方或者前端,在实际的项目中,不可能对每一个地方都做好异常处理,再优雅的代码也可能抛出异常,那么在 Spring 项目中,可以怎样优雅的处 ...

  6. SpringBoot系列教程web篇之404、500异常页面配置

    接着前面几篇web处理请求的博文,本文将说明,当出现异常的场景下,如404请求url不存在,,403无权,500服务器异常时,我们可以如何处理 原文友链: SpringBoot系列教程web篇之404 ...

  7. SpringBoot系列教程web篇之重定向

    原文地址: SpringBoot系列教程web篇之重定向 前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -&g ...

  8. SpringBoot系列教程JPA之新增记录使用姿势

    SpringBoot系列教程JPA之新增记录使用姿势 上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第 ...

  9. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

随机推荐

  1. 15款最好的 jQuery 网格布局插件

    如今,大多数网站设计要靠网格系统和布局,这能够提供给设计人员一个方便的途径来组织网页上的内容.网格的设计最常见于报纸和杂志的版面,由文字和图像构成的列组成. 这篇文章给大家分享精心挑选的15款最佳的 ...

  2. oracle权限详解

    一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的). 二.系统权限管理:1.系统权限分类: ...

  3. Python 变量类型和运算符

    -*- coding:utf-8 -*- ''' if语法 if conditon: [tab键] command [tab键] command ... else: [tab键] command [t ...

  4. android tab之间滑动切换界面功能

    1. onTouchListener();                       //捕捉touch事件,比如说onDown 需要将可滑动的控件加上两个方法:(1)view.setOnTouch ...

  5. fbset

    fbset用于读取和设置framebuffer的参数. # fbset mode "800x480-112" # D: 64.998 MHz, H: 58.034 kHz, V: ...

  6. windows 解压缩命令

    首先安装winrar 压缩: 命令:start winrar a test test.py 解压: 命令:start winrar x -y test.rar F:\batShell\test\tes ...

  7. e578. Setting the Clipping Area with a Shape

    This example demonstrates how to set a clipping area using a shape. The example sets an oval for the ...

  8. node.js执行shell命令

    nodejs功能强大且多样,不只是可以实现 服务器端 与 客户端 的实时通讯,另一个功能是用来执行shell命令 首先,引入子进程模块 var process = require('child_pro ...

  9. perl 内置操作符 $^O -判断操作系统环境

    今天看bowtie2的源代码的时候,发现有这样一段用法: my $os_is_nix = $^O ne "MSWin32"; my $align_bin_s = $os_is_ni ...

  10. 大型web系统数据缓存设计-l转载

    原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...