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-入门相关推荐

  1. Spring Boot 入门

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  2. Spring Boot入门——全局异常处理

    Spring Boot入门--全局异常处理 参考文章: (1)Spring Boot入门--全局异常处理 (2)https://www.cnblogs.com/studyDetail/p/702758 ...

  3. Spring Boot 入门——Spring Boot 简介||微服务简介

    Spring Boot 入门 1.Spring Boot 简介 Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用 简化Sp ...

  4. Spring Boot 入门(五):集成 AOP 进行日志管理

    本篇文章是接着 Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理写的,按照前面几篇博客的教程,可以搭建一个简单的项目,主要包含了 Pagehelper+MyBatis 分页 ...

  5. Spring Boot 入门与实战笔记

    **一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...

  6. Spring Boot 入门之缓存和 NoSQL 篇(四)

    原文地址:Spring Boot 入门之缓存和 NoSQL 篇(四) 博客地址:http://www.extlight.com 一.前言 当系统的访问量增大时,相应的数据库的性能就逐渐下降.但是,大多 ...

  7. Spring Boot 入门小目标 3 --- 先来试着热部署

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 入门小目标---先来试着热部署 这次写的主要就是 使用 springloaded 来实现 热部署. 很 ...

  8. Spring Boot入门(9)网页版计算器

    介绍   在写了前八篇Spring Boot项目的介绍文章后,我们已经初步熟悉了利用Spring Boot来做Web应用和数据库的使用方法了,但是这些仅仅是官方介绍的一个例子而已.   本次分享将介绍 ...

  9. spring boot入门小案例

    spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...

  10. spring boot入门(九) springboot的过滤器filter。最完整、简单易懂、详细的spring boot教程。

    关于过滤器和拦截器的区别,已经spring boot入门(七)中说明.下面举个过滤器的应用场景,比如用户信息页只有再用户登录后才可以进入,没有登录的用户是无法进入的,此时便可以采用过滤器来讲没有登录的 ...

最新文章

  1. 推荐算法——基于协同过滤CF
  2. 交叉验证 Cross-validation
  3. 获取预制和获取gameObject
  4. python sql server 数据同步_两台SQL Server数据同步解决方案
  5. Java英雄:丹·艾伦
  6. java模拟登陆_java-模拟登陆练习(示例代码)
  7. linux 修改块大小,linux 查看及修改os系统块的大小
  8. 【Day11】平时在项目开发中都做过哪些前端性能优化
  9. (5)vivado不能生成bit文件(学无止境)
  10. java基础代码实例_java学习之web基础(3):Servlet 和 Request的登录处理实例
  11. listview 样式 LVS_REPORT 与 LVS_EDITLABELS 编辑单元格时,当前行第一列内容不显示
  12. IMP-00017: 由于 ORACLE 错误 6550解决办法
  13. VS建立Web网站 20141201
  14. apache tomcat linux 配置,linux下apache+tomcat配置
  15. 【超强教程】MapGIS如何入门及体验?
  16. 2022-05 - 英语语法 - 16种时态终极详解
  17. Redux Reducer 的拆分
  18. 文献找不到有什么好办法,运用谷粉学术和sci-hub下载各种文献
  19. mysql数据驱动测试_[ddt02篇]十年测试老鸟帮您解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
  20. Objective C的关键字oneway

热门文章

  1. 机器学习中的数学——距离定义(二十二):海林格距离(Hellinger Distance)
  2. 认识与使用计算机 答案,2016年计算机二级文管试题题库(含答案)
  3. QT 读BIN文件的两种方式
  4. Android之ANR
  5. python查询46级成绩
  6. 音乐相册源码php,分享使用JavaScript制作微信音乐相册实例
  7. Excel 函数 自定义规则 VBA 实现 实时 语音 声音 提示 功能 股票 数据 资料 获取 盯盘 助手 K线图 模板
  8. 设置在线html视频几倍数播放,HTML5倍数功能视频播放器(加速2倍,1.5倍播放)...
  9. ZohoCRM客户管理系统应用的案例分享
  10. 【PCL】NDT点云配准(Registration)