Spring Boot-入门
Java 企业级开发,经历了从 SSH (Spring + Struts2 + Hibernate)到 SSM(Spring + StringMVC + MyBatis)再到 Spring 全家桶(Spring + Spring Boot + SpringData + Spring Cloud 等)的过程。总之,代码的封装程度越来越高,开发的复杂度也在越来越低。
Spring 全家桶的底层基础都是 Spring 框架,通常可以分为两类:
- Java 企业级开发:Spring Boot
- Java 分布式应用:Spring Cloud
Spring Boot 概述
Spring Boot 可以一站式实现 J2EE 企业级开发。
Spring Boot 用来简化 Spring 应用的开发,采用“约定大于配置”的原则,省去了大量复杂的配置,可以方便快速的创建一个企业级应用。
Spring Boot 本身是基于 Spring 的,类似于前端框架 Vue 所使用的 vue-cli,快速创建独立的企业级应用。
Spring Boot 的特点:
- 嵌入了 Servlet 容器,应用无需打包
- 提前封装好了各种依赖对应的 starter
- 默认配置,简化开发,配置可以修改
- 不用配置 XML,不会生成代码,各种写好的 API 开箱即用
- 运行时的应用监控,可以监控服务状态
因为 Spring Boot 是基于 Spring 框架的二次封装,如果你不了解 Spring 框架的一些底层原理,则在轻松入门后,难以精通。
单体应用和微服务
Spring Boot 的诞生背景就是微服务的大潮流,这里先大概提一下微服务这个概念。
微服务概念流行之前,大部分应用都是单体应用。单体应用将所有代码耦合到一个项目中,通过命名空间或直接引入类文件实现类的调用。在项目初期比较小的时候,这种开发方式效率高、部署容易、测试方便、易于实现负载均衡(水平扩容)。但是发展到一定规模后,会出现牵一发而动全身的问题,各种依赖关系耦合复杂,难以实现新需求,难以修改。
微服务将应用的每一个模块独立为一个服务,服务之间通过 RPC 或 HTTP 方式实现相互调用,从而实现解耦,方便实现各个微服务的独立扩容。通常会有一个网关对外提供统一的服务入口。
Spring Boot 的 HelloWorld 项目(基于 IDEA)
在 Spring 官网 http://spring.io/ 可以找到各种相关的资源。HelloWorld 示例可以参考:http://spring.io/guides/gs/actuator-service/
创建 Maven 工程
在 Intellij IDEA 中选择 File-》New Project-》Maven,创建 Maven 类型的项目,选择合适的SDK 版本后,点击下一步,输入 GroupId(例如com.baid)和 ArtifactId(例如 spring_boot_demo,IDEA 不支持中横线),点击下一步选择项目的位置(默认在 C 盘),然后 Finish 完成即可。
项目初始化完成后,IDEA 右下角会弹出“Maven project need to be imported”弹出,选择“Enable Auto-Import” 即可。这样当你更新了 Maven 项目的 pom.xml 文件时,IDEA 会自动获取依赖。
导入 Spring Boot 的依赖
到这里,Maven 项目就创建完成了,接下来只需要添加 Spring Boot 依赖即可,复制下面的文本到项目根目录中的 pom.xml 文件的 project 标签下即可:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><scope>test</scope></dependency></dependencies>
编写 Java 代码
编写主程序启动 Spring Boot 应用
在 IDEA 中展开刚才创建的项目的代码目录,在 /src/main/java 目录右击,创建新的 Java class,输入“com.kikakika.SpringBootApplication”这种方式,可以自动创建包和类,然后编辑类:
package com.kikakika;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** 通过注解标注这是一个 Spring Boot 主程序类*/
@SpringBootApplication
public class HelloWorldMainApplication {// 启动 Spring Boot 应用程序public static void main(String[] args) {SpringApplication.run(HelloWorldMainApplication.class, args);}
}
编写 Controller
右击 com.kikakika 包名,创建新的 Java class,输入 controller.HelloController,在 com.kikakika.controller 包下面创建 HelloController 类:
package com.kikakika.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HelloController {@ResponseBody@RequestMappingpublic String Hello() {return "Hello World!!";}
}
启动 Spring Boot
回到 SpringBootApplication 文件,右击,运行即可启动这个 Java 应用。控制台会打印启动日志,注意看对应的 Tomcat 端口,一般是 8080:
2019-01-01 12:27:20.100 INFO 12380 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2019-01-01 12:27:20.154 INFO 12380 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-01-01 12:27:20.160 INFO 12380 --- [ main] com.kikakika.HelloWorldMainApplication : Started HelloWorldMainApplication in 5.598 seconds (JVM running for 8.007)
在浏览器中访问localhost:8080/hello
查看效果。
打包部署 Spring Boot 应用
参考:https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-maven-plugin.html
首先将 Spring Boot 的用于创建可执行 Jar 文件的 Maven 插件导入项目中:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.1.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
然后,打包。
打包完成后,整个项目,包括 Tomcat 都会被打到一个 Jar 包中,一般放在项目根目录下的 target 目录中,可以直接通过 java -jar
命令运行即可。
C:\Users\kika\Desktop>java -jar spring_boot_demo-1.0-SNAPSHOT.jar. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.0.5.RELEASE)2019-01-01 12:50:36.293 INFO 10096 --- [ main] com.kikakika.HelloWorldMainApplication : Starting HelloWorldMainApplication v1.0-SNAPSHOT on DESKTOP-QDO2CMR with PID 10096 (C:\Users\kika\Desktop\spring_boot_demo-1.0-SNAPSHOT.jar started by kika in C:\Users\kika\Desktop)
2019-01-01 12:50:36.301 INFO 10096 --- [ main] com.kikakika.HelloWorldMainApplication : No active profile set, falling back to default profiles: default
2019-01-01 12:50:36.447 INFO 10096 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6d1e7682: startup date [Tue Jan 01 12:50:36 CST 2019]; root of context hierarchy
通过浏览器访问即可,效果跟在 IDEA 中启动应用一样。
Spring Boot 的一点点原理
启动器
在项目根目录下的 pom.xml 文件中,可以看到 artifactId 以 spring-boot-starter-
开头的各种项目,不管是在 parent 父项目标签还是 dependencies 依赖标签中。这些项目,就是各种场景下的启动器,每个启动器都内置了完整的依赖。
Spring 提前为我们封装了各种场景下的启动器,例如针对 ActiveMQ 的 spring-boot-starter-activemq,针对 AOP 的 spring-boot-starter-aop,针对使用 Hibernate 的 Spring Data JPA 的 spring-boot-starter-data-jpa,针对 Redis 的 spring-boot-starter-data-redis,针对邮件的 spring-boot-starter-mail 等。使用的时候,只需要当做依赖导入即可。
例如 web 开发所用到的 spring-boot-starter-web 项目的依赖关系如下:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.0.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-json</artifactId><version>2.0.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.0.5.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.12.Final</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.0.9.RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.9.RELEASE</version><scope>compile</scope></dependency></dependencies>
@SpringBootApplication 注解及相关注解
所有的 Spring Boot 入口类必须添加 @SpringBootApplication
注解,表示这是一个 Spring Boot 应用程序。
按住 Ctrl 后点击 SpringBootApplication 注解,可以查看注解的定义。可以看到这个注解有引入了一堆其他注解,其中有个 EnableAutoConfiguration 注解,继续深入可以发现 EnableAutoConfiguration 注解又引入了另一堆注解,其中有 @AutoConfigurationPackage
和 @Import({AutoConfigurationImportSelector.class})
。
@AutoConfigurationPackage 注解
查看这个注解的定义时,可以发现其引入了 @Import({Registrar.class})
注解,进入到 Registrar 类对应代码,在下面这一行加断点:
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName());}
在 getPackageName 方法上右击,选择“Evaluate Expression”,查看对应信息,这里会显示加 @SpringBootApplication
的类所在的包:
综上,Spring Boot 将主配置类(即使用 @SpringBootApplication
注解标注的类)所在的包及其子包下的所有组件都扫描到 Spring 容器。
@Import({AutoConfigurationImportSelector.class})
注解
EnableAutoConfiguration 注解中,还引入了 @Import({AutoConfigurationImportSelector.class})
这个注解。
自定义依赖
最终,所有自动加载的依赖,都来自 Maven 仓库中的 Jar 包指定,如果需要修改,可以直接改这里:repository/org/springframework/boot/spring-boot-autoconfigure/2.0.5.RELEASE/spring-boot-autoconfigure-2.0.5.RELEASE.jar!/META-INF/spring.factories
用 IDEA 快速创建 Spring Boot 项目
Spring Boot 太流行了,所以各个版本的 IDE 都内置了创建 Spring Boot 项目的快速方式。对于 IDEA,在创建项目 project 时,可以选择创建 “Spring Initialize” 项目,IDEA 会在创建项目时提示你导入各种 Starter 启动器,之后便自动导入依赖。
转载于:https://www.cnblogs.com/kika/p/10851518.html
Spring Boot-入门相关推荐
- Spring Boot 入门
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
- Spring Boot入门——全局异常处理
Spring Boot入门--全局异常处理 参考文章: (1)Spring Boot入门--全局异常处理 (2)https://www.cnblogs.com/studyDetail/p/702758 ...
- Spring Boot 入门——Spring Boot 简介||微服务简介
Spring Boot 入门 1.Spring Boot 简介 Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用 简化Sp ...
- Spring Boot 入门(五):集成 AOP 进行日志管理
本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...
- Spring Boot 入门与实战笔记
**一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...
- Spring Boot 入门之缓存和 NoSQL 篇(四)
原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多 ...
- Spring Boot 入门小目标 3 --- 先来试着热部署
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 入门小目标---先来试着热部署 这次写的主要就是 使用 springloaded 来实现 热部署. 很 ...
- Spring Boot入门(9)网页版计算器
介绍 在写了前八篇Spring Boot项目的介绍文章后,我们已经初步熟悉了利用Spring Boot来做Web应用和数据库的使用方法了,但是这些仅仅是官方介绍的一个例子而已. 本次分享将介绍 ...
- spring boot入门小案例
spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...
- spring boot入门(九) springboot的过滤器filter。最完整、简单易懂、详细的spring boot教程。
关于过滤器和拦截器的区别,已经spring boot入门(七)中说明.下面举个过滤器的应用场景,比如用户信息页只有再用户登录后才可以进入,没有登录的用户是无法进入的,此时便可以采用过滤器来讲没有登录的 ...
最新文章
- 推荐算法——基于协同过滤CF
- 交叉验证 Cross-validation
- 获取预制和获取gameObject
- python sql server 数据同步_两台SQL Server数据同步解决方案
- Java英雄:丹·艾伦
- java模拟登陆_java-模拟登陆练习(示例代码)
- linux 修改块大小,linux 查看及修改os系统块的大小
- 【Day11】平时在项目开发中都做过哪些前端性能优化
- (5)vivado不能生成bit文件(学无止境)
- java基础代码实例_java学习之web基础(3):Servlet 和 Request的登录处理实例
- listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示
- IMP-00017: 由于 ORACLE 错误 6550解决办法
- VS建立Web网站 20141201
- apache tomcat linux 配置,linux下apache+tomcat配置
- 【超强教程】MapGIS如何入门及体验?
- 2022-05 - 英语语法 - 16种时态终极详解
- Redux Reducer 的拆分
- 文献找不到有什么好办法,运用谷粉学术和sci-hub下载各种文献
- mysql数据驱动测试_[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
- Objective C的关键字oneway
热门文章
- 机器学习中的数学——距离定义(二十二):海林格距离(Hellinger Distance)
- 认识与使用计算机 答案,2016年计算机二级文管试题题库(含答案)
- QT 读BIN文件的两种方式
- Android之ANR
- python查询46级成绩
- 音乐相册源码php,分享使用JavaScript制作微信音乐相册实例
- Excel 函数 自定义规则 VBA 实现 实时 语音 声音 提示 功能 股票 数据 资料 获取 盯盘 助手 K线图 模板
- 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
- ZohoCRM客户管理系统应用的案例分享
- 【PCL】NDT点云配准(Registration)