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