一、SpringBoot入门

1、SpringBoot简介

SpringBoot是整个Spring技术栈的整合,来简化Spring应用开发,约定大于配置,去繁从简,just run 就能创建一 个独立的,产品级别的应用。

  背景:

    J2EE笨重的开发、繁多的配置、底下的开发效率、复杂的部署流程、第三方技术集成难度大。

  解决:

     "Spring全家桶"时代。

     Spring Boot ——> J2EE一站式解决方案

     Spring Cloud ——>分布式整体解决问题

  优点:

    • 快速创建独立运行的 Spring项目以及与主流框架集成

    • 使用嵌入式的Servlet容器,应用无须打成WAR包

    • starters(启动器)自动依赖与版本控制

    • 大量的自动配置,简化开发,也可修改默认值

    • 无须配置XML,无代码生成,开箱即用

缺点:

    • 入门容易,精通难

    • 是基于Spring技术栈的二次封装,需要对API有深入了解,才能做到融会贯通。

2、微服务

微服务概念起源:2014,martin flower

微服务:架构风格(服务微化)

一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;

每一个功能元素最终都是一个可独立替换和升级的软件单元。

3、环境准备

JDK1.8: java version "1.8.0_162"

Maven: Apache Maven 3.6.1

开发工具:IntelliJ IDEA 2018.3.4 x64

SpringBoot版本:2.3.1

IDEA中Maven配置如下:

4、SpringBoot Hello World!

1、首先点击Create New Project 进入创建页面,点击Spring Initializr,JDK最好为1.8或以上

2、groupIdartifactIdmaven管理项目包时用作区分的字段,就像是地图上的坐标。

groupId:groupId分为几个字段,例如com.hello,前面的com叫【域】,后面的是你自己起的域名。

artifactId:artifactId一般是项目名或者模块名。

一般来说,包名根目录=groupId+artifactId。这个是不允许和别人重复的,尤其是需要上线的项目。一般公司为了不重复都会注册一个域名(URL用的那种),这样就肯定不会重复了。

3、选用SpringBoot的版本为2.3.1的稳定版

4、最终确定项目的存放路径,点击finish等待maven自动导包,至此一个SpringBoot项目就构建出来了。

5、此时的目录结构如下所示

6、启动主程序,浏览器输入 http://localhost:8080即可访问

7、新建一个controller,controller要与启动类同级目录,否则会出现访问失败的情况,@Restcontroller相当于@Controller + @ResponseBody, 表明是一个controller,且数据格式为json,代码如下:

  1. @RestController
  2. public class HelloController {
  3. @RequestMapping(value = "/hello",method = RequestMethod.GET)
  4. public String hello(){
  5. return "Hello World!";
  6. }
  7. }

controller要与启动类同级目录:

@GetMapping

用于将HTTP GET请求映射到特定处理程序方法的注释。具体来说,@GetMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.GET)。

@PostMapping

用于将HTTP POST请求映射到特定处理程序方法的注释。具体来说,@PostMapping是一个作为快捷方式的组合注释@RequestMapping(method = RequestMethod.POST)。

@RequestMapping

一般情况下都是用@RequestMapping(method=RequestMethod.),因为@RequestMapping可以直接替代以上两个注解,但是以上两个注解并不能替代@RequestMapping,@RequestMapping相当于以上两个注解的父类!

除此之外还有其他几种的组合注解,如@PutMapping、@DeleteMapping、@PatchMapping,建议采用组合注解,这样能更加直观的体现请求的方式(参考其他博主

resource文件夹中目录结构

  • static : 保存所有的静态资源;js css images。
  • templates: 保存所有的模板页面;(SpringBoot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freeamarker,thymeleaf)。
  • application.properties: Spring Boot应用的配置文件;可以修改一些默认设置。

5、简化部署

  1. <!--这个插件可以将应用打成一个可执行的jar包 -->
  2. <build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-maven-plugin</artifactId>
  7. </plugin>
  8. </plugins>
  9. </build>

将这个应用打成jar包,并通过java -jar 的命令运行。

打包流程如下:

点击Lifecycle下的package命令生成jar包,在项目的target目录下可找到jar包,cmd命令 + cd jar包路径,执行java -jar + jar包名 即可运行jar包。

先点击package执行打包:

此时可看到target下有jar包生成:

cmd执行jar包:

6、Hello World !深究

1、POM文件
1、父项目
  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.1.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <!--他的父项目是 -->
  8. <parent>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-dependencies</artifactId>
  11. <version>2.3.1.RELEASE</version>
  12. </parent>
  13. 他来真正管理SpringBoot应用里面的所有依赖版本

SpringBoot的版本仲裁中心;

在spring-boot-dependencies中管理的依赖不需要声明版本号。

2、启动器
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

spring-boot-starter-web:

​ spring-boot-starter :spring-boot场景启动器,例如内嵌了tomcat,帮我们导入了web模块正常运行依赖的组件。

SpringBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器。

2、主程序类,入口类
  1. /**
  2. * 来标注一个主程序类,用来说明这是一个SpringBoot应用
  3. */
  4. @SpringBootApplication
  5. public class SpringbootHelloWorldApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(SpringbootHelloWorldApplication.class, args);
  8. }
  9. }

@SpringBootApplication : SpringBoot应用标注在某个类上说明这个类是SpringBooy的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. @Inherited
  5. @SpringBootConfiguration
  6. @EnableAutoConfiguration
  7. @ComponentScan(excludeFilters = {
  8. @Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}),
  9. @Filter( type = FilterType.CUSTOM,classes ={AutoConfigurationExcludeFilter.class})})
  10. public @interface SpringBootApplication {

@SpringBootConfiguration : SpringBoot的配置类;

​ 标注在某个类上,表示这个是一个Spring Boot的配置类;

@Configuration: 配置类上来标注额这个注解;

​ 配置类:配置文件;配置类也是容器中的一个组件,因为标注了@Component注解

@EnableAutoConfiguration:开启自动配置功能;

​ 以前我们需要配置的东西,SpringBoot帮我们自动配置,@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效。

  1. @AutoConfigurationPackage
  2. @Import({AutoConfigurationImportSelector.class})
  3. public @interface EnableAutoConfiguration {

@AutoConfigurationPackage : 自动配置包

​ @Import({Registrar.class});

​ Spring的底层注解@Import,给容器导入一个组件;导入的组件有Registrar.class;

​ 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件扫描到Spring容器。

AutoConfigurationImportSelector:

​ 将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;

​ 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;

​ SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()): SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.3.1.RELEASE.jar

SpringBoot入门详细教程的更多相关文章

  1. ThinkJS框架入门详细教程(二)新手入门项目

    一.准备工作 参考前一篇:ThinkJS框架入门详细教程(一)开发环境 安装thinkJS命令 npm install -g think-cli 监测是否安装成功 thinkjs -v 二.创建项目 ...

  2. spring入门详细教程(五)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  3. Spring入门详细教程(四)

    前言 本篇紧接着spring入门详细教程(三),建议阅读本篇前,先阅读第一篇,第二篇以及第三篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/ ...

  4. Spring入门详细教程(三)

    前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...

  5. Spring入门详细教程(二)

    前言 本篇紧接着spring入门详细教程(一),建议阅读本篇前,先阅读第一篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/1016553 ...

  6. Xcode和github入门详细教程

    Xcode和github详细教程! 主要是参考了现在网上的一些资料给没整过的人一个详细的指南. (1)先在github上注册账号,自行解决! (2)在导航栏右上角new一个repository(仓库) ...

  7. Jenkins自动化部署入门详细教程

    大纲 1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试: 或者前后端分离后,经常会修改接口,然后重新部署 ...

  8. 钉钉开发第三方H5微应用入门详细教程[ISV][免登流程][授权码][HTTP回调推送][识别用户身份][获取用户信息]

    转载请注明原文地址:https://www.cnblogs.com/applerosa/p/11509512.html (by lnexin@aliyun.com 世间草木) 此教程注意点: 适用于第 ...

  9. SpringBoot入门简易教程

    使用SpringBoot来开发一个简单的restful api网关功能,目标:实现对SpringBoot的简单入门. 1. 创建SpringBoot项目 可以通过spring官网(https://st ...

随机推荐

  1. Netty 源码解析: Netty 的 ChannelPipeline

    ChannelPipeline和Inbound.Outbound         我想很多读者应该或多或少都有 Netty 中 pipeline 的概念.前面我们说了,使用 Netty 的时候,我们通 ...

  2. [html][js]视频倍速播放功能

    代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...

  3. @bzoj - 3724@ PA2014Final Krolestwo

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 你有一个无向连通图,边的总数为偶数. 设图中有k个奇点(度数为奇 ...

  4. .net core 部署到windows服务上的方法

    前言 Net core 项目部门在Windows有很多种方式,大致有以下几种, dotnet 命令, iis(windowshosts), 一些开源的应用容器(docker ) 基于一些exe 程序, ...

  5. Python:三元表达式、列表推导式和生成器表达式

    三元表达式 语法格式 如下: 为真时的结果 if 判断条件 else 为假时的结果 例子 name = input('姓名>>: ') res = '请进' if name == '张三' ...

  6. Spring Cloud 系列之 Alibaba Nacos 配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  7. cb07a_c++_迭代器和迭代器的范围

    cb07a_c++_迭代器和迭代器的范围c++primer第4版https://www.cnblogs.com/txwtech/p/12309989.html--每一种容器都有自己的迭代器--所有的迭 ...

  8. 11.实战交付一套dubbo微服务到k8s集群(3)之dubbo微服务底包镜像制作

    1.下载jre镜像并推送到harbor [root@hdss7- ~]# docker pull registry.cn-hangzhou.aliyuncs.com/yfhub/jre8:8u112 ...

  9. 查找nginx安装目录并启动

    今天公司突然停电,来电后发现服务无法访问了,服务器是部署在公司内 发现ip ping 不通,是服务器没开 手动开了服务器,还是无法访问 可以FTP,但是不能访问服务,说明机器已经开了,有些东西应该没启 ...

  10. 慕课网 性能优化之MySQL优化--- max 和count的性能优化

    注:在执行SQL语句前加上explain可以查看MySQL的执行计划 数据库:MySQL官方提供的sakila数据库 Max优化: 例如:查询最后支付时间 explain select max(pay ...