SpringBoot系列教程起步
本篇学习目标
- 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界面(https://start.spring.io/)
- Spring Tool Suite
- IntelliJ IDEA
- SpringBoot CLI
下面是使用web界面构建SpringBoot项目示例图,另外几种方式不再一一累述
三分钟开发SpringBoot应用程序
现在我们要花上三分钟创建一个小的应用程序,是一个类似待办事项的小应用,从这个应用程序中,我们就能感受到SpringBoot的起步依赖和自动配置的强大魅力 本章源码下载
- 创建一个BOOK(实体类)
- 创建一个Repository(仓库接口)
- 创建一个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系列教程起步的更多相关文章
- Java工程师之SpringBoot系列教程前言&目录
前言 与时俱进是每一个程序员都应该有的意识,当一个Java程序员在当代步遍布的时候,你就行该想到我能多学点什么.可观的是后端的框架是稳定的,它们能够维持更久的时间在应用中,而不用担心技术的更新换代.但 ...
- springBoot系列教程07:异常捕获
发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事 所以处理异常时,最基本的要求就是发生异 ...
- SpringBoot系列教程web篇之过滤器Filter使用指南
web三大组件之一Filter,可以说是很多小伙伴学习java web时最早接触的知识点了,然而学得早不代表就用得多.基本上,如果不是让你从0到1写一个web应用(或者说即便从0到1写一个web应用) ...
- SpringBoot系列教程web篇之自定义异常处理HandlerExceptionResolver
关于Web应用的全局异常处理,上一篇介绍了ControllerAdvice结合@ExceptionHandler的方式来实现web应用的全局异常管理: 本篇博文则带来另外一种并不常见的使用方式,通过实 ...
- SpringBoot系列教程web篇之全局异常处理
当我们的后端应用出现异常时,通常会将异常状况包装之后再返回给调用方或者前端,在实际的项目中,不可能对每一个地方都做好异常处理,再优雅的代码也可能抛出异常,那么在 Spring 项目中,可以怎样优雅的处 ...
- SpringBoot系列教程web篇之404、500异常页面配置
接着前面几篇web处理请求的博文,本文将说明,当出现异常的场景下,如404请求url不存在,,403无权,500服务器异常时,我们可以如何处理 原文友链: SpringBoot系列教程web篇之404 ...
- SpringBoot系列教程web篇之重定向
原文地址: SpringBoot系列教程web篇之重定向 前面介绍了spring web篇数据返回的几种常用姿势,当我们在相应一个http请求时,除了直接返回数据之外,还有另一种常见的case -&g ...
- SpringBoot系列教程JPA之新增记录使用姿势
SpringBoot系列教程JPA之新增记录使用姿势 上一篇文章介绍了如何快速的搭建一个JPA的项目环境,并给出了一个简单的演示demo,接下来我们开始业务教程,也就是我们常说的CURD,接下来进入第 ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
随机推荐
- selenium测试(Java)--浏览器控制(四)
1. 控制浏览器窗口大小 1 package com.test.window; 2 3 import org.openqa.selenium.Dimension; 4 import org.openq ...
- 【转】【C#】全局键盘监听
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServi ...
- (转)YV12 and NV12
用videoCapture和IAMStreamConfig拿到的支持的格式列表.发现支持2中图像格式,YV12和NV12.具体是怎么样的内存分布不知道.查了些文档.自己修改了几个图.看出了点端倪 YV ...
- FFMPEG的解码后的数据格式
这两天在阅读电视转发服务器中的流媒体底层库的源码时,在看到显示部分的时候,遇到了一些疑问: 就是在用d3d做显示时候,我们显示的数据格式,指定为yv12,对于YV12的数据格式在内存中的分布,可以参考 ...
- Eclipse/MyEclipse全屏插件
此插件可以让Eclipse/MyEclipse的界面全屏,隐藏菜单栏和状态栏! MyEclipse 2014/2015中亲测有效! 插件下载: http://files.cnblogs.com/got ...
- Configurations of Vim/GVim of dsp
Linux环境写到用户主目录下的.vimrc文件(没有则新建),Windows环境则为GVim安装目录下的_vimrc(没有则新建),内容如下: "分上下两屏 "sp " ...
- Java调用FTP实例
package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...
- [转] CSocket 和CAsyncSocket类介绍
微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易. CAsyncSocket类逐个封装了WinSock API,为高级网络程序员提供了更加有力而灵活的方法.这个类 ...
- linux用户及用户组操作
Linux用户.用户组权限管理详解 Linux用户管理三个重要文件详解: Linux登陆需要用户名.密码./etc/passwd 文件保存用户名.登录Linux时,Linux 先查找 /etc/pas ...
- Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义
http://blog.csdn.net/slovyz/article/details/47400107