SpringBoot的基本使用

1、Springboot的基本介绍

先介绍一下 Spring:Spring是于2003 年兴起的一个轻量级的Java 开源框架,Spring是为了解决企业级应用开发的复杂性而创建的,简化开发

Spring 框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置。Spring Boot 以约定大于配置的核心思想,默认帮我们进行了很多设置,多数 Spring Boot 应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用。

Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置。另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门

  • 开箱即用,提供各种默认配置来简化项目配置

  • 内嵌式容器简化Web项目

  • 没有冗余代码生成和XML配置的要求

1.1、SpringBoot的四大特性

  1. SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
  2. 自动配置:SpringBoot的自动配置特性利用了Spring4对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
  3. 命令行接口:(Command-line-interface, CLI):SpringBoot的CLI发挥了Groovy编程语言的优势,并结合自动配置进一步简化Spring应用的开发;
  4. Actuatir:它为SpringBoot应用的所有特性构建一个小型的应用程序。但首先,我们快速了解每项特性,更好的体验他们如何简化Spring编程模型。

1.2、使用 Springboot 的好处

回顾我们之前的 SSM 项目,搭建过程还是比较繁琐的,需要:1、配置web.xml,加载spring和spring mvc。2、配置数据库连接、配置spring事务。3、配置加载配置文件的读取,开启注解。。。配置完成之后部署tomcat 调试。

而使用 Spring Boot 来开发项目则只需要非常少的几个配置就可以搭建起来一个 Web 项目,并且利用 IDEA 可以自动生成生成,

2、使用springboot

springboot 对系统的要求:Java 8 & 兼容java14,Maven 3.3+ 。

2.1、基于maven空模板创建springboot项目

下面示例的最终目录结构:

先通过 IDEA 建立一个简单的 maven 工程,不需要使用任何 maven 模板,然后添加依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>springbootTest01</artifactId>
    <version>1.0-SNAPSHOT</version>


    <!-- 所有的springboot的工程都以spring父工程为父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

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

建一个 springboot 启动类:

package start;


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

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

所有的springboot application启动类都需要在类级别上加上@SpringBootApplication注解。

在启动类的当前包或者子包下建一个测试 controller 类:

package start.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String handle01(){
        return "Hello, Spring Boot 2!";
    }
}

注意,springboot 默认扫描的的类是在启动类当前的包和下级包,所以如果 controller 类不在启动类的当前包或者子包下,则该组件无法被扫描出来。

然后直接执行启动类的 main 方法即可。

在输出日志中可以看到已经启动了内嵌的 tomcat ,并且默认端口号为 8080。

通过访问 http://localhost:8080/hello 可以看到上面接口的输出:

springboot 集成了Tomcat和Jetty,默认使用Tomcat作为应用容器,开发者只需要将工程打成jar包直接丢到服务器上就可以执行了,不需要再单独部署到was、jboss、tomcat这些应用服务器上。

2.2、基于Spring Initializr创建springboot项目

Spring官方提供了非常方便的工具 Spring Initializr 让我们快速构建应用,可以通过 IDEA 或者官网来使用该工具创建springboot项目。

2.2.1、通过 IDEA创建项目

我们可以通过 IDEA 创建 springboot 项目,在创建项目时选择 spring initializr:

然后填写项目基本信息:

在下一步勾选 web,选中 spring web即可:

初始化项目目录结构如下:

通过运行 SpringbootdemoApplication 类的 main 方法即可启动 springboot,然后就可以通过浏览器访问 http://localhost:8080/ 来访问项目了。

有一些无用的文件可以直接删掉,比如 .mvn、mvnw、mvnw.cmd 这些。

有时候通过IDEA创建项目可能比较慢,而且可能连接超时,此时我们可以在官网来创建初始化项目。

2.2.2、通过官网创建项目

我们可以通过访问官方网站来创建一个初始化项目,然后再将该项目拷贝下来进行修改。

  1. 打开 https://start.spring.io/
  2. 填写项目信息,记得在右边添加spring web依赖
  3. 点击”Generate Project“按钮即可生成项目

类似下图:

3、springboot项目如何打jar包

springboot 项目中默认打包是会打成 jar 包的,打成 jar 包后我们可以直接在命令行中执行该 jar 包,无需再额外安装 tomcat 等 servlet 容器。

只需要在项目的 pom.xml 文件中添加插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

然后就可以通过 idea 打包了:

在执行 package 之前可以先执行一个 clean,清空一下旧的包。

打包完成后,可以看到在 target 目录中生成了一个 jar 包:

然后就可以在命令行中直接执行该 jar 包了,例如:java -jar springbootTest01-1.0-SNAPSHOT.jar

执行后 tomcat 就被启动成功了,在浏览器中访问 http://localhost:8888/hello 可以看到接口访问正常。

我们也可以通过编写一些脚本来启动和停止应用,参考:https://blog.csdn.net/qq_34491508/article/details/91490434

4、自定义配置文件

Spring Boot在底层已经把所需要的配置都给我们自动配置好了,当然,我们也可以通过使用配置文件来修改 SpringBoot 的配置。

springboot 配置文件的文件名是固定的:application.properties 或者是 application.yml,两种文件本质是一样的,区别只是两种文件的语法不同。

示例:

下面我们通过配置文件来修改 tomcat 的默认端口,首先在 resource 目录下新建一个 application.properties 文件,然后再该文件下配置 tomcat 的端口号:

然后重新启动启动类即可。由此我们就只能通过 8888 端口来访问接口了。

我们可以通过参考官网来知道如何通过哪些语法来修改所需配置:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

5、springboot 运行原理

5.1、依赖管理

所有的 springboot 项目都依赖一个父项目,主要是管理项目的资源过滤及插件!

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

从该父项目点进去,你会发现还有一个父依赖

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

这里才是真正管理SpringBoot应用里面所有依赖版本的地方,SpringBoot的版本控制中心;

以后我们导入依赖默认是不需要写版本;但是如果导入的包没有在依赖中管理着就需要手动配置版本了;

5.2、启动器

springboot-boot-starter-xxx 就是spring-boot的某个场景的启动器。

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

如上,spring-boot-starter-web 启动器就帮我们导入了web模块正常运行所依赖的组件。

SpringBoot 将所有的功能场景都抽取出来,做成一个个的 starter (启动器),只需要在项目中引入这些 starter 即可,所有相关的依赖都会导入进来 , 我们要用什么功能就导入什么样的场景启动器即可 ;我们未来也可以自己自定义 starter。

6、容器功能

6.1、组件添加

在 springboot 的默认配置文件 properties 中已经包含了很多的默认配置,这些默认配置能够帮我们完成大部分的配置,但是不能通过 properties 配置 bean,这个时候可以用到 Springboot 中的 @Configuration 和 @Bean 来帮我们 bean 的构建。

@Configuration注解可以达到在Spring中使用xml配置文件的作用。@Configuration 用于定义配置类,可替换 spring 的 bean xml 配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被扫描,并用于构建 bean 定义,初始化Spring容器。

  • @Configuration可理解为用spring的时候的xml文件。
  • @Bean可理解为用spring的时候xml里面的bean标签。

使用 spring 时,我们通常通过一个类似于 bean.xml 的配置文件来配置 bean,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <!-- 配置创建的对象-->
    <bean id="user" class="test.User"></bean>
</beans>

下面通过 springboot 的 @Configuration 来替代 spring 中配置文件的写法:

先创建一个 User 类:

package test01.entity;

public class User {
    public void say() {
        System.out.println("hello");
    }
}

通过配置类来注册 bean:

//实际上配置类也会被注册为一个组件
@Configuration
public class MyConifg {

    // 通过 @Bean 注解来注册bean。
    // 以方法名作为组件的id,返回值就是组件在容器中的实例。默认是单例模式,即scope="singleton"
    @Bean
    public User testUser() {
        return new User();
    }
}

@Configuration标注在类上,相当于把该类作为 spring 的 xml 配置文件中的<beans>,作用是配置 spring 容器(应用上下文)。

然后就可以在启动类中获取 bean 了:

@SpringBootApplication
public class SpringbootStartApplication  {
    public static void main(String[] args) {

        //这里返回的是IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(SpringbootStartApplication.class, args);

        User user =(User) run.getBean("testUser");
        user.say();

        User user2 =(User) run.getBean("testUser");
        System.out.println(user == user2);  //将输出true,因为通过bean获取到的对象都是单例对象
    }
}
原文地址:https://www.cnblogs.com/wenxuehai/p/15383459.html