SpringBoot概念

Spring优缺点分析

Spring优点

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

Spring缺点

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配 置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

所有这些配置都代表了开发时的损耗,因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。

除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标, 而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

SpringBoot解决Spring上述缺点

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能

自动配置

SpringBoot的自动配置,指的是SpringBoot会自动将一些配置类的bean注册进IOC容器,我们可以需要的地方使用@autowired或者@resource等注解来使用它

“自动”的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,SpringBoot会自动注入这些配置bean,我们直接使用这些bean即可

SpringBoot的优点

  • 简单、快速、方便地搭建项目;
  • 对主流开发框架的无配置集成;
  • 极大提高了开发、部署效率。

SpringBoot简单案例实现

案例需求:请求Controller中的接口,返回“你好 SpringBoot”到页面。

(1)使用Spring Initializr方式构建SpringBoot项目

Spring Initializr是一个Web应用,它提供了基本的项目结构,能够帮助我们快速构建一个基础的SpringBoot项目。创建步骤如下所示:

打开IDEA->File->New->Project:

Project SDK用于设置创建项目使用的SDK版本,这里我选择JDK1.8版本;在“choose starter service url(选择初始化服务器地址)”下使用默认的初始化服务器地址“https://start.spring.io”进行SpringBoot项目创建(注意使用快速方式创建SpringBoot项目时,主机必须联网)。

点击下一步:

点击Finish,即可完成SpringBoot项目的创建工作:

创建好的SpringBoot项目结构如下图所示:

使用Spring Initializr方式构建的SpringBoot项目会默认生成项目启动类、存放前端静态资源文件夹和模板页面的文件夹、编写项目配置的全局配置文件夹以及进行单元测试的测试类。

(2)创建一个用于Web访问的Controller

在com.hardy.springboot_demo下创建一个名为controller的包,在controller包下创建一个HelloController类,并编写一个返回“你好 SpringBoot”的接口,代码如下:

@RestController // 该注解为组合注解,相当于Spring中 @Controller+@ResponseBody注解
public class HelloController { @RequestMapping(name="/demo", produces="application/json; charset=utf-8")
public String demo(){
return "你好 SpringBoot";
} }

其中 produces = "application/json; charset=utf-8" 是为了解决中文乱码的问题。

(3)运行项目

点击运行按钮:

访问 http://localhost:8080/ 查看结果:

单元测试与热部署

(1)单元测试

开发中,每当完成一个功能接口或业务方法的编写后,通常会借助单元测试验证功能是否正常。SpringBoot对项目的单元测试提供了很好的支持,在使用时,需要提前在项目的pom.xml文件引入spring-boot-starter-test测试依赖启动器,以便通过相关注解实现单元测试。

操作步骤如下:

1、引入spring-boot-starter-test测试依赖启动器

在项目的pom.xml文件引入spring-boot-starter-test测试依赖启动器,示例代码如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

注意:使用Spring Initializr方式搭建的SpringBoot项目会自动加入spring-boot-starter-test测试依赖器,无需再手动添加。

2、编写单元测试类和测试方法

使用Spring Initializr方式搭建的SpringBoot项目,会自动src.test.java测试目录下创建与项目主程序启动类对应的测试类并自带一个contextLoads测试方法,下面来完善一下测试类的代码:

@SpringBootTest // 标记为SpringBoot单元测试类,并加载项目的ApplicationContext上下文环境
class SpringbootDemoApplicationTests { @Autowired
private HelloController helloController; /**
* 自动创建的单元测试方法示例
*/
@Test
void contextLoads() {
String demo = helloController.demo();
System.out.println(demo);
} }

运行测试方法,在控制台查看单元测试结果:

(2)热部署

在开发过程中,通常需要对一段业务代码进行重复修改测试,在修改之后往往需要重启服务,有些服务需要加载很久才能启动成功,这种不必要的重复操作不利于提升开发效率。为此,SpringBoot框架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目。

操作步骤:

1、引入spring-boot-devtools热部署依赖启动器

<!-- 引入热部署依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>

引入spring-boot-devtools热部署依赖启动器后,还需要针对IDEA开发工具进行热部署相关的功能设置。

2、IDEA工具热部署设置

选择IDEA工具界面 File->Settings 选项,打开 Compiler 面板设置页面:

选择 Build 下的 Compiler 选项,在右侧勾选 Build project automatically 选项将项目设置为自动编译,单击 OK 按钮保存设置。

在项目的任意页面中使用组合快捷键 Ctrl+Shift+Alt+/ 打开 Maintenance 选项框,选中并打开 Registry 页面,具体如下图所示:

在列表中找到 compiler.automake.allow.when.app.running,将该选项的 Value 勾选,用于指定 IDEA 工具在程序运行过程中自动编译,最后单击 Close 按钮完成设置。

3、使热部署生效

假如用 mvn spring-boot:run 方式启动应用,修改完java文件就会立即生效。

假如用 debug 方式启动应用,则需要手动重新编译整个项目,或者编译被修改的文件。比如点击 IDEA 菜单 Build > Build XXX / Recompile XXX

4、热部署效果测试

以 debug 模式启动项目,访问 http://localhost:8080/ 查看结果:

页面一开始输出的内容为“你好SpringBoot”:

为了测试配置的热部署是否有效,我们在不关闭项目的情况下将页面返回内容修改为“Hello SpringBoot”并保存,查看控制台信息会发现项目能够自动构建和编译,说明项目热部署生效,刷新页面:

可以看到,浏览器输出了“Hello SpringBoot”,说明项目热部署成功了。

总结

在本篇文章中,我们介绍了SpringBoot的基本概念,实现了一个简单的SpringBoot项目demo,并且介绍了其单元测试与热部署配置。

关于SpringBoot的知识还有很多,比如它的配置文件、原理及源码解析、数据访问、视图技术及缓存管理,在后面的文章中,我们会一一进行讲解。

SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解的更多相关文章

  1. MacOS下SpringBoot基础学习

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...

  2. SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)

    前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...

  3. SpringBoot基础学习(二) SpringBoot全局配置文件及配置文件属性值注入

    全局配置文件 全局配置文件能够对一些默认配置值进行修改.SpringBoot 使用一个名为 application.properties 或者 application.yaml的文件作为全局配置文件, ...

  4. 学习Spring Boot:(五)使用 devtools热部署

    前言 spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后 ...

  5. ElasticSearch基础学习(SpringBoot集成ES)

    一.概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎. 它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服 ...

  6. SpringBoot -基础学习笔记 - 01

    SpringBoot个人笔记-szs 一.使用thymeleaf模板引擎来指定所需资源的位置 可以做到当项目名进行更改后,模板引擎也会进行更新相关的路径;如下图展示,会自动添加crud根目录! < ...

  7. SpringBoot基础学习(三) 自定义配置、随机数设置及参数间引用

    自定义配置 SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而 ...

  8. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

  9. 基础学习day08---多态、简单工厂、Object类equals和toString

    一.多态 1.1.多态概念  定义:某一类事物的多种存在形态.        例:动物中猫,狗.    猫这个对象对应的类型是猫类型:猫 x = new 猫();    同时猫也是动物中的一种,也可以 ...

随机推荐

  1. Linux入门之基本的概念、安装和操作

    目录 Linux基本概念 Linux的安装 虚拟机安装CentOS7 CentOS设置网络 Linux基本操作命令 文件目录操作命令 进程操作命令 文本操作命令 Linux权限操作 用户和组操作命令 ...

  2. 多图详解 TCP 连接管理,太全了!!!

    TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...

  3. Day02_13_Javadoc_生成帮助文档

    JavaDoc 命令:javadoc -encoding UTF-8 -charset UTF-8 Doc.java 执行该命令后,会在java目录生成index.html打开就可以看到生成的文档了 ...

  4. k8s 安装 rabbitMQ 单机版

    rabbitMQ docker镜像使用rabbitmq:3.8-management service.yaml文件 apiVersion: v1 kind: Service metadata: nam ...

  5. vue中利用.env文件存储全局环境变量,以及配置vue启动和打包命令

    目录 1,前言 2,.env文件的作用 3,配置.env文件 4,配置启动命令 5,获取.env中的全局变量 5,实际用处 1,前言 分享一下vue项目中利用.env文件存储全局环境变量,以及利于项目 ...

  6. shellcode隐写到像素RGB免杀上线到CS

    利用把Shellcode隐写到图片像素RGB进行免杀上线到CS --by:chenw 0x01 前言 前几天跟一个朋友一起搞一个站的时候,发现那个站点开了很多杀软,使用CS的powershell马无法 ...

  7. DVWA之File Inclusion

    File Inclusion File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),req ...

  8. MS06-040漏洞研究(中)【转载】

    课程简介 经过上次的分析,我们已经知道了MS06-040漏洞的本质,那么这次我们就通过编程实现漏洞的利用. 课程介绍 实验环境: 操作机: Windows XP 实验工具: Tools Path ID ...

  9. Day004 顺序结构

    顺序结构 JAVA的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行. 顺序结构是最简单的算法结构. 语句与语句之间,是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它 ...

  10. 一文详解MySQL如何同时自增自减多个字段

    本文将带大家聊一下如何同时自增自减多个字段 开始之前,先分享一套MySQL教程,小白入门或者学习巩固都可以看 MySQL基础入门-mysql教程-数据库实战(MySQL基础+MySQL高级+MySQL ...