相关推荐recommended
SpringBoot之入门使用
作者:mmseoamin日期:2024-01-30

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

SpringBoot之入门使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、Spring缺点分析
  • 二、什么是SpringBoot
  • 三、SpringBoot的使用
    • 官网搭建SpringBoot
    • Idea搭建SpringBoot项目
    • Maven项目创建SpringBoot
    • SpringBoot项目结构
      • POM文件
      • SpringBoot原理分析
        • 起步依赖
        • 自动配置
        • 核心注解
          • @SpringBootApplication
          • @SpringBootConfiguration
          • @EnableAutoConfiguration
          • @AutoConfigurationPackage
          • @Import({AutoConfigurationImportSelector.class})
          • @ComponentScan
          • 总结

            前言

            提示:这里可以添加本文要记录的大概内容:

            Spring Boot 是一个基于 Spring 框架的 Java Web 开发框架,旨在简化 Spring 应用程序的搭建和开发过程。它提供了一系列的特性和工具,使得开发者可以更加快速和高效地创建企业级应用程序。

            在这篇博客中,我将介绍 Spring Boot 的入门使用,包括如何创建一个简单的 Spring Boot 项目、如何运行和调试应用程序,以及如何使用一些常用的 Spring Boot 特性。

            如果你是一个 Java 开发者,并且想要学习如何使用 Spring Boot 来构建高效、可靠的 Web 应用程序,那么这篇博客将为你提供一个很好的起点。让我们开始吧!


            提示:以下是本篇文章正文内容,下面案例可供参考

            一、Spring缺点分析

            尽管 Spring 的组件代码相对较轻量级,但其配置却相对较重。使用 Spring 进行项目开发需要在配置文件中编写大量的代码,这些配置都代表了开发过程中的额外工作量。此外,Spring 项目的依赖管理也是一个耗时且复杂的任务。在环境搭建阶段,需要仔细分析需要导入哪些库的坐标,同时还需要考虑导入与之有依赖关系的其他库的坐标。一旦选择了错误的依赖版本,可能会导致不兼容问题,严重影响项目的开发进度。例如,Spring 5.0 及以上版本只能与 Junit 4.12 及以上版本兼容。

            二、什么是SpringBoot

            Spring Boot 是一个用于创建独立生产级别的 Spring 应用程序的框架,它简化了 Spring 应用程序的开发过程,提供了一种更快速、更轻量级的方式来构建基于 Spring 框架的应用程序。

            Spring Boot 通过提供一些默认配置和约定,减少了开发人员在配置上的工作量,让开发者可以更专注于业务逻辑的实现。以下是 Spring Boot 的一些主要特点:

            • 自动配置(Auto-Configuration):Spring Boot 可以根据项目的依赖和内容自动配置应用程序,开发者无需手动配置许多常见的设置,减少了样板代码。
            • 独立性(Standalone):Spring Boot 应用程序可以作为独立的可执行 JAR 文件运行,内嵌了 Web 服务器(如 Tomcat、jetty),无需部署到外部服务器。
            • 约定大于配置(Convention over Conf):Spring Boot 遵循一些默认的约定,例如项目结构、文件命名等,减少了开发者需要做的决策。
            • 内嵌式 Web 容器(Embedded Web Container):Spring Boot 内置了常用的 Web 容器,可以快速地开发和部署 Web 应用程序。
            • 起步依赖(Starter Dependencies):Spring Boot 提供了一系列预配置的依赖库,可以轻松地集成各种功能,如数据库访问、安全认证、消息传递等。
            • 自动化配置(Automated Configuration):SpringBoot项目自动提供最优配置,同时可以修改默认值满足特定的要求。
            • 可嵌套性(Embeddable):Spring Boot 应用程序可以嵌入到其他 Spring 应用程序中以提供特定的功能。

              三、SpringBoot的使用

              官网搭建SpringBoot

              1. 访问start.spring.io
              2. 生成SpringBoot项目

                SpringBoot之入门使用,在这里插入图片描述,第1张

                SpringBoot版本说明:

              • CURRENT:最新版本(但不一定稳定)。
              • GA:General Availability,正式发布的版本,官方推荐使用该版本,国外很多项目都是使用GA来表示正式发布版本。
              • SNAPSHOT:快照版,可以稳定使用,且该版本会一直进行小量的优化和改进。
              • PRE:预览版,主要是用来内部开发人员和测试人员测试使用,因此不建议使用。
              • Release:正式版,也可能没有任何后缀也表示正式版

                3.解压生成的SpringBoot项目

                4.在idea中打开项目即可

                Idea搭建SpringBoot项目

                1.在idea中新建项目

                SpringBoot之入门使用,在这里插入图片描述,第2张

                2.项目类型为Spring Initializr,选择JDK版本,Java版本选择8

                SpringBoot之入门使用,在这里插入图片描述,第3张

                3.选择自己想要的SpringBoot版本,点击自己需要的起步依赖,最后creat

                SpringBoot之入门使用,在这里插入图片描述,第4张

                Maven项目创建SpringBoot

                1.使用Maven创建普通JAVA项目

                SpringBoot之入门使用,在这里插入图片描述,第5张

                2.在pom中添加项目的父工程、起步依赖、插件

                
                
                  org.springframework.boot
                  spring-boot-starter-parent
                  2.7.0-M1
                
                
                
                  
                    org.springframework.boot
                    spring-boot-starter-web
                  
                
                
                
                  
                    
                      org.springframework.boot
                      spring-boot-maven-plugin
                    
                  
                
                

                3.编写启动类

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

                4.编写配置文件application.properties

                #日志格式
                logging.pattern.console=%d{MM/dd HH:mm:ss.SSS} %clr(%-5level) ---  [%-15thread] %cyan(%-50logger{50}):%msg%n
                #端口号
                server.port=8888
                

                SpringBoot项目结构

                POM文件

                • 所有的SpringBoot 项目都必须继承 spring-boot-starter-parent,也就是说,它们都是 spring-boot-starter-parent 的子项目。spring-boot-starter-parent 定义了常用的配置、依赖和插件等信息,供 SpringBoot 项目继承和使用。
                  
                    org.springframework.boot
                    spring-boot-starter-parent
                    2.7.0-M1
                     
                  
                  
                  • SpringBoot项目中可以定义起步依赖,起步依赖不是以jar包为单位,而是以功能为单位
                    
                      
                        org.springframework.boot
                        spring-boot-starter-web
                      
                      
                        org.springframework.boot
                        spring-boot-starter-test
                        test
                      
                    
                    
                    • spring-boot-maven-plugin插件是将项目打包成jar包的插件。该插件打包后的SpringBoot项目无需依赖web容器,可以直接使用JDK运行
                      
                        
                          
                            org.springframework.boot
                            spring-boot-maven-plugin
                          
                        
                      
                      

                      SpringBoot原理分析

                      起步依赖

                      起步依赖可以理解为一个项目启动时所需要的基本依赖关系。它是 Spring Boot 框架的一个重要特性,用于简化项目的构建和配置过程。

                      举个例子,假设你要开发一个简单的 Web 应用程序,使用 Spring Boot 框架。你可以选择一个起步依赖,比如"spring-boot-starter-web",这个依赖会自动包含了开发 Web 应用程序所需的一些常见库和框架,如 Spring Web、Tomcat 服务器等。

                      起步依赖的好处是,你不需要手动添加和配置每个库和框架的依赖,而是通过选择一个起步依赖,它会自动为你处理这些依赖关系。这样可以减少冗余的配置,提高开发效率。

                      另外,起步依赖还提供了一些默认的配置,使得你的项目在相同的环境下能够以相同的方式运行。这意味着,当你使用某个起步依赖时,它会为你设置一些常见的配置选项,比如端口号、日志级别等,这样你可以更快速地启动和运行你的项目。

                      自动配置

                      Spring Boot 的自动配置原理是基于约定优于配置的理念实现的。它通过猜测应用程序可能需要的配置,并在启动时自动进行配置。

                      自动配置的核心是spring-boot-autoconfigure模块,该模块提供了很多自动配置的类,这些类会根据应用程序的上下文信息(如类路径、环境变量等)来决定是否进行配置。

                      当应用程序启动时,Spring Boot 会扫描项目中的类路径,查找@EnableAutoConfiguration或@ComponentScan注解,并根据这些注解来加载自动配置类。自动配置类会通过反射获取应用程序中的类和接口信息,并根据一些约定(如是否存在某个接口的实现类、是否存在某个注解等)来决定是否进行配置。

                      如果需要自定义自动配置,可以通过实现AutoConfigurationImportFilter接口或使用@AutoConfigureOrder注解来控制自动配置类的加载顺序,或者通过实现SmartInitializingSingleton接口来在应用程序启动后进行额外的配置操作。

                      核心注解

                      @SpringBootApplication

                      标注是SpringBoot的启动类。此注解等同于@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan。当在一个类上添加@SpringBootApplication注解时,Spring Boot 会根据注解中的信息自动配置应用程序。它会扫描当前类所在的包及其子包中的类,并根据需要进行自动配置,例如添加必要的 Bean、配置数据源、启动 Web 服务器等。

                      @SpringBootConfiguration

                      @SpringBootConfiguration是@Configuration的派生注解,跟@Configuration功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration是Springboot的注解,而@Configuration是Spring的注解

                      @EnableAutoConfiguration

                      SpringBoot自动配置注解。等同于@AutoConfigurationPackage+@Import(AutoConfigurationImportSelector.class)

                      简单来说,当使用@EnableAutoConfiguration注解时,Spring Boot 会根据类路径设置、其他 Bean 和各种属性设置等信息,自动配置项目所需的 Bean。

                      @AutoConfigurationPackage

                      自动扫描包的注解,它会自动扫描主类所在包下所有加了注解的类(@Controller,@Service等),以及配置类(@Configuration)。

                      @Import({AutoConfigurationImportSelector.class})

                      该注解会导入AutoConfifigurationImportSelector类对象,该对象会从META-INF/spring.factories文件中读取配置类的名称列表。

                      @ComponentScan

                      该注解会扫描项目,自动装配一些项目启动需要的Bean。


                      总结

                      提示:这里对文章进行总结:

                      总之,Spring Boot 提供了一种简洁、高效的方式来构建和部署 Spring 应用程序,使开发人员能够更加专注于业务逻辑的开发。