20191019-SpringBoot入门基础知识

1.1 Spring Boot简介

      SpringBoot是用来简化Spring应用开发的,它是整个Spring技术栈的整合,它具有约定大于配置,去繁从简的特性,使得我们随便就能创建一个独立的,产品级别的应用。SpringBoot是J2EE的一站式解决方案

SpringBoot

产生背景
    使用J2EE笨重、并且有繁多的配置,使得我们的开发效率非常的低并且配置部署流程复杂、
集成第三方技术难度比较大。
SpringBoot的优点
  • 能够快速创建独立运行的Spring项目以及与主流框架集成。
  • 使用嵌入式的Servlet容器,应用无需打包成War包。
  • starters(启动器)自动依赖于版本控制。
  • 具有大量的自动配置(可以修改默认值),简化了开发。
  • 具有无需配置XML,无代码生成,开箱即用的特点。
  • 准生产环境的运行时应用监控。
  • 与云计算的天然集成。

      唯一的缺点是入门容易,精通难!

1.2 微服务(使用SpringBoot可以快速构建构建)

      微服务是一种架构风格,它强调每个功能都是一个独立的服务(程序),功能与功能之间通过HTTP进行交互。每个功能元素最终都是一个可独立替换和独立升级的软件单元

1.3 SpringBoot HelloWorld

需求说明:
  • 实现浏览器发送/hello请求,服务器接受请求并处理,响应Hello World字符串;
  1. 构建基于Maven的SpringBoot项目
    在这里插入图片描述
  2. 导入SpringBoot相关依赖(pom.xml增加以下内容)
    <!--引入SpringBoot所需父级依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <dependencies>
        <!--引入使用SpringBoot构建Web应用所需的依赖  内嵌tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
  1. 编写一个主程序HelloWorldMain,用于启动SpringBoot应用,@SpringBootApplication注解的功能是用来表示该应用程序是一个SpringBoot应用程序。
package com.to1024;

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

/**
 * 该注解用于标识该应用程序为SpringBoot应用程序
 */
@SpringBootApplication
public class HelloWorldMain {

    public static void main(String[] args) {
        //用于启动SpringBoot应用程序
        SpringApplication.run(HelloWorldMain.class, args);
    }
}
  1. 创建控制器HelloWorldController,用于处理请求。
package com.to1024.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller//标识为控制层
public class HelloWroldController {

    @RequestMapping(value = "/hello")
    @ResponseBody
    public String helloWorld(){

        return "hello";
    }
}

  1. 运行SpringBoot应用程序,直接运行之前创建的主程序即可!
    启动日志运行结果

简化SpringBoot部署:

  1. 在项目的pom文件中引入相关插件。
    <build>
        <plugins>
            <!--简化SpringBoot引用程序打包的插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.将项目打包(找到IDEA的右侧栏中的Maven ProjectsLicecyclepackage),将会在target目录下生产一个jar包或war包。
打包项目
2. 导出生产的jar包
SpringBoot打包生成的jar包
3. 在命令行使用java -jar运行程序
在命令行中使用java -jar命令运行程序 4. 访问程序
运行结果

1.4 Hello World程序解析

  1. POM文件

    1. 父项目
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    
    它也还有自己的父项目
    
    <parent>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-dependencies</artifactId>
    	<version>1.5.9.RELEASE</version>
    	<relativePath>../../spring-boot-dependencies</relativePath>
    </parent>
    
    这个父级项目用于管理SpringBoot中所有依赖的版本控制
    

          父项目可以称为版本仲裁中心,只要引入了父项目那么我们就不需要写版本号了。(除非在dependencies里面没没有相关的依赖那么我们就需要写上版本)

    1. 启动器(导入的依赖)
         <!--引入使用SpringBoot构建Web应用所需的依赖  内嵌tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
    

          spring-boot-starter:SpringBoot场景启动器。帮我们导入了web模块正常运行所需的依赖,包括内嵌式tomcat。
          Spring Boot将所有的功能场景都抽取出来了,将它们做成了一个个的staters(启动器),我们需要时只需要在项目中引入starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器

  2. 主程序类型,主入口类

package com.to1024;

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

/**
 * 该注解用于标识该应用程序为SpringBoot应用程序
 */
@SpringBootApplication
public class HelloWorldMain {

    public static void main(String[] args) {
        //用于启动SpringBoot应用程序
        SpringApplication.run(HelloWorldMain.class, args);
    }
}
  • @SpringBootApplication:被标注该注解的类被称为Spring Boot的主配置类,通过这个类可以启动Spring Boot应用程序。
@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(Spring Boot定义的注解):Spring Boot的配置类,这个注解标注在某个类上,则表示这个类是一个Spring Boot配置类。它的底层是 @Configuration:被该注解标注的类是一个配置类,实际上配置类所对应的也就是之前的各种配置文件。实质上配置类也是一个组件(标注类 @Component 的类)
  • @EnableAutoConfiguration:标注了该注解则表示开启自动装配。以前我们需要配置的东西现在我们都无须配置,Spring Boot都会帮我们自动配置,但是前提是要开启自动配置@EnableAutoConfiguration.
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
  • @AutoConfigurationPackage:自动配置包,实质上就是将主配置类(被@SpringBootApplication标注的类)下的所有包及其子包扫描到Spring容器中,它的底层类有一个@Import({Registrar.class})注解,@Import是Spring的底层注解,用于给一个容器中导入一个组件;导入组件由{Registrar.class}这个类。
    @Import({EnableAutoConfigurationImportSelector.class}):向容器中导入组件EnableAutoConfigurationImportSelector:导入哪些组件的选择器,在它的底层方法中会将所有需要导入的组件以类全名的方式返回;这些组件会被添加到容器中;它会给容器导入非常多的自动配置类(xxxAutoConfiguration);```也就是给容器导入这个场景所需要的主键,并做出相应的配置``,下图是部分初始化的组件(不是所有都会导入,只有我们需要使用的会导入)。
    EnableAutoConfigurationImportSelector导入的组件有了自动配置类,就免去了我们手动编写配置注入功能组件的工作。
    再继续深入:
    SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, ClassLoader)*:它的作用是用于在Spring Boot启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfigutaion指定的值,并将这些值作为自动配置类导入到容器中,然后自动配置类就生效类,一旦生效就可以帮我们进行自动装配工作了一起需要我们自己配置的东西,现在都由Spring Boot帮我们完成了。

J2EE的整体整合和解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar中。
META-INF/spring.factories上图就是META-INF/spring.factories的文件所在包,里面包含了会在Spring Boot应用启动时加载的一些配置类。

1.5 快速构建Spring Boot项目(IDEA)

  1. 使用Spring Initializer快速构建项目。
    在这里插入图片描述 使用它来构建Spring Boot项目最终会自动生成,项目生成向导中所选的一些配置,并会附带一个主类。

默认生成的项目解析:

扫描二维码关注公众号,回复: 8722693 查看本文章
  • 主程序已经生成好了,我们只需要关注业务逻辑即可。

  • 自带一个主类,作为Spring Boot应用程序的入口。

  • resources目录:

    • static:用于存放所有的静态资源;如js、css、images
    • templates:用于存放所有的模板页面;因为Spring Boot默认jar包使用的是嵌入式的Tomcat,它默认是不支持JSP页面的,但是可以使用模板引擎(freemarker、thymeleaf)。
发布了56 篇原创文章 · 获赞 17 · 访问量 6200

猜你喜欢

转载自blog.csdn.net/qq_43199016/article/details/102639672