SpringBoot 01 入门

本文详细介绍SpringBoot框架的优势、微服务概念、IDEA配置流程、HelloWorld案例实现步骤,包括项目创建、运行、打包,以及自动配置原理和依赖管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Spring Boot简介

优点

简化Spring应用开发的框架
对Spring技术栈的大整合
J2EE开发一站式解决方案

2、微服务

Martin Fowler 2014年 提出
微服务是一种架构风格,组成服务的每一个元素都是可以独立替换和独立升级的软件单元,详情可见:微服务原文优快云译文简书译文

3、SpringBoot的IDEA配置

3-1 约束环境

jdk 1.8以上
maven 3.3以上
IDEA 2019.2
SpringBoot 最新(2020.04)

3-2 MAVEN配置

在maven/conf/settings.xml 中配置:

<profiles>
	<profile>
	      <id>jdk-1.8</id>
	      <activation>
		        <activeByDefault>true</activeByDefault>
		        <jdk>1.8</jdk>
	      </activation>
	      <properties>
		        <maven.compiler.source>1.8</maven.compiler.source>
		        <maven.compiler.target>1.8</maven.compiler.target>
		        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	        </properties>
	    </profile>
</profiles>

3-3 配置IDEA使用本地maven仓库

Settings中配置使用本地maven仓库
在IDEA的setting中打开,配置本地maven仓库!
在maven/conf/settings.xml 中配置阿里镜像maven仓库(不配置会从国外maven官网下载,速度很慢)

<mirrors>
     <!-- 阿里镜像 -->
       <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>        
    	</mirror>
</mirrors>

4、SpringBoot HelloWorld!

目标:浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串

4-1 创建maven工程

第一次创建需要配置jdk版本
在这里插入图片描述

4-2 创建项目

Spring Initializr方式创建项目
在这里插入图片描述
在这里插入图片描述
创建过程中,可以快捷导入依赖
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;

在这里插入图片描述

创建完毕后,启用自动导入maven依赖

在这里插入图片描述
配置文件,此处为修改端口号
在这里插入图片描述
@SpringBootApplication来标注一个主程序类,说明这是一个SpringBoot应用。默认生成的Spring Boot项目;

  • 主程序已经生成好了,我们只需要我们自己的逻辑
  • resources文件夹中目录结构
    • static:保存所有的静态资源; js css images;
    • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
    • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
      在这里插入图片描述
      创建controller类
@Controller
public class HelloController {
    @RequestMapping("/hello")
    @ResponseBody
    public String test1(){
        return "hello";
    }
}

4-3 启动运行效果

在这里插入图片描述

4-4 SpringBoot打包成jar包,简化部署

刚刚创建的Springboot程序中的pom文件中,有这样一个插件

<!--这个插件将应用打包成一个可执行的jar包-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

选着package
在这里插入图片描述
会得到我们刚才创建程序的jar包
在这里插入图片描述
通过Show in Explorer找到文件,拷贝文件的路径
在这里插入图片描述
打开cmd窗口,进入上述路径,输入

cd C:\Users\15637\Desktop

执行jar包

java -jar xxx(名字).jar

在这里插入图片描述
启动成功,打开网页测试,成功
在这里插入图片描述

tips:jar包和war包的区别

jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。

war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配置文件,前端的页面文件,以及依赖的jar。文件数量对于jar包,这样便于我们部署工程,直接放到tomcat的webapps目录下,直接启动tomcat即可。同时可以使用WinRAR查看war包,直接将后缀.war改成.rar

5、HelloWorld探究

5-1 maven依赖版本仲裁

pom文件中,有这么一个父项目

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>

点击spring-boot-starter-parent发现他的父项目为

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

点击spring-boot-dependencies发现里面有所有依赖的版本,他来真正管理Spring Boot应用里面的所有依赖版本

在这里插入图片描述
这就是springboot中的版本仲裁中心
以后我们导入依赖默认是不需要写版本: ( 没有在dependencies里面管理的依赖自然需要声明版本号)

5-2 spring依赖启动器

在创建springboot过程中,我们导入的web依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>

我们点进去,发现这个依赖是由以下几个依赖组成的

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.2.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.2.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.2.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
      <version>2.2.6.RELEASE</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>tomcat-embed-el</artifactId>
          <groupId>org.apache.tomcat.embed</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.5.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
      <scope>compile</scope>
    </dependency>

我们发现以上都是web相关的依赖,也就是只需要导入一个spring-boot-starter-web依赖,我们就可以快速构建一个web项目。
这就是springboot场景启动器,一般由spring-boot-starter + 你要的场景组成,可以快速导入,该场景所需要的相关依赖,并由版本仲裁进行版本管理

启动器链接
在这里插入图片描述

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

5-3 SpringbootApplication主程序

package com.lwf;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }

}

@SpringBootApplication表示这是一个SpringBoot应用。当这个注解标注在一个类上,表示这个类是SpringBoot的主配置类,要通过这个类的main方法来启动SpringBoot应用。

@SpringBootApplication的构成
我们点进SpringBootApplication的上一级发现,由以下注解构成:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

主要由@SpringBootConfiguration和@EnableAutoConfiguration构成
@SpringBootConfiguration:SpringBoot配置类
标注在某个类上,表示这个类是一个SpringBoot配置类,我们继续点击,发现父类是一个@Configuration,@Configuration用于配置类上进行标注,等同于以前的配置文件。再进行点击,发现@Configuration是一个@Component,是个组件,说明配置类也是容器中的一个组件。

@EnableAutoConfiguration构成:开启自动配置功能
以前需要我们进行配置的东西,通过这个注解,可以让Spring Boot帮我们自动配置。点击进入@EnableAutoConfiguration构成,有两个注解:

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包。点进去,发现有个
@Import(AutoConfigurationPackages.Registrar.class)注解,@Import是Spring的底层注解,表示在Spring中导入一个组件,导入的组件由AutoConfigurationPackages.Registrar.class决定。
点进Registrar类,发现他的作用如下:
将主配置类( @SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

@Import(AutoConfigurationImportSelector.class)
@Import:导入组件
AutoConfigurationImportSelector:自动配置导包选择器。
会给容器中导,入非常多的自动配置类( xxxAutoConfiguration) ; 就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
在这里插入图片描述
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;
以前需要我们手动配置的东西,都由他帮我们自动配置了
J2EE整体整合和自动配置都在:spring-boot-autoconfigure-2.2.6.RELEASE.jar

结论:springboot所有 自动配置都是在启动的时候扫描并加载: spring. factories所有的自动配置类都在这里
面,但是不-定生效,要判断条件是否成立,只要导入了对应的starter,就有对应的启动器了,有了启动器,我们
自动装配就会生效,然后就配置成功!

  1. springboot在启动的时候,从类路径下/META-INF/ spring . factories获取指定的值;

2.将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!

3.以前我们需要自动配置的东西,现在springboot帮我们做了!

4.整合javaEE,解决方案和自动配置的东西都在spring boot-autoconfigure-2.2.0.RELEASE.jar这个包下

5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;

6.容器中也会存在非常多的xxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置,@Configuration ,JavaConfig!

7.有了自动配置类,免去了我们手动编写配置文件的工作!

6、创建Spring Boot项目

6-1 使用Spring Initializer快速创建Spring Boot项目

同4-1和4-2

6-2 测试

编写Controller类

@Controller
public class HelloController {
    @RequestMapping("/hello")
    //@RequestMapping("/hello"):接收来自浏览器的/hello请求
    @ResponseBody
    // @ResponseBody返回给浏览器 String 值
    public String test1(){
        return "hello Springboot";
    }
}

@ResponseBody注解表示,发挥给浏览器一个字符串,将它加在某个方法上,则只对该方法生效,将他加在某个类上,则对该类下所有方法生效。
即:

@ResponseBody
@Controller
public class HelloController {

为了简便,还可以将两个注解融合为一个:@RestController
点进@RestController,发现它就是由@ResponseBody和
@Controller构成

运行Springboot01HelloworldApplication类的主方法,访问http://localhost:8088/hello,返回值为:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天呐少爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值