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. 使用Tensorflow Object Detection进行训练和推理

    整体流程(以PASCAL VOC为例) 1.下载PASCAL VOC2012数据集,并将数据集转为tfrecord格式 2.选择并下载预训练模型 3.配置训练文件configuration(所有的训练 ...

  2. 1068 Find More Coins

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...

  3. ES系列(四):http请求分发框架解析

    上一篇讲解了es的网络通信模块实现过程,大致明白其工作原理.再总结一下,就是基于netty编程范式,形成es通信基础.从而,最终我们得到几个重要的handler: Netty4HttpPipelini ...

  4. php中var关键字用法

    见很多朋友说在php中定义变量用不用var都没关系,其实不然. 看看例子,如果我这样使用var: 1 var $a=123; 2 echo $a; 3 //那么程序会提示语法错误,要去掉var这个变量 ...

  5. hdu4535

    题意: 吉哥系列故事--礼尚往来 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...

  6. ZOJ3715 竞选班长求最小花费

    题意:       有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...

  7. 【spring源码系列】之【BeanDefinition】

    1. BeanDefinition简介 前面讲的解析bean标签,本质就是将bean的信息封装成BeanDefinition对象的过程,最后放入容器beanDefinitionMap中.spring ...

  8. 启动QQ时出现无法访问个人文件夹怎么决解

    找了一圈的百度,真正有用的. 在设置中进行修改. https://zhidao.baidu.com/question/2073820786837168348.html 打开设置的其中页面 你的IT管理 ...

  9. Windows bat批处理删除指定N天前的文件

    1:新建批处理文件:del_old_file.bat,更改系统时间为7天前,在c盘sql back 目录下新建测试文件,再将系统时间改为正确时间 2:编辑内容: rem 删除C:\sql back目录 ...

  10. repo sync error: .repo/manifests/: contains uncommitted changes

    andorid 源码库同步,报错如标题,好几次想放弃,尝试了网上不少办法,无效, 最终从 stackoverflow 得到答案: After issued repo sync, I got a err ...