初始SpringBoot:详解特性和结构
作者:mmseoamin日期:2024-04-29

 

🏡JAVA码农探花:

 🔥 推荐专栏:《SSM笔记》《SpringBoot笔记》

         

🛸学无止境,不骄不躁,知行合一


目录

前言

一、SpringBoot项目结构

1.启动类的位置

2.pom文件

start

parent

打包

二、依赖管理特性

三、自动配置特性

总结


初始SpringBoot:详解特性和结构,第1张


前言

SpringBoot项目结构,特性介绍(常用到的基本都讲解了,很详细,基于官方文档讲解)。


一、SpringBoot项目结构

IDEA创建非常简单,不是主要讲解,我使用的是IDEA2023.3(这里默认你Maven环境都配好了)

初始SpringBoot:详解特性和结构,在这里插入图片描述,第2张
初始SpringBoot:详解特性和结构,在这里插入图片描述,第3张

创建完成后的文件结构如下:

初始SpringBoot:详解特性和结构,在这里插入图片描述,第4张

  • java:java包下存放的是开发创建的类、接口等。
    • 这里restart是我的工程名,同时它就是项目工程文件夹,开发所创建的包、类基本都在这文件夹下。
    • SpringBoot启动类(这里的启动类是RestartApplication,SpringBoot项目创建完成后默认的启动类名称是首字母大写的项目工程名+Application)放在工程文件夹下,即:工程文件夹 / 启动类。不在嵌套文件夹。
  • resources
    • 存放静态资源文件的地方:html、css、照片、配置文件(properties文件,yaml文件等)。
  • pom.xml
    • 引入依赖文件,用于引入你工程所需要的依赖。

    1.启动类的位置

    • 官方建议最佳实战就是将启动类放在工程文件夹下的第一层,不需要再嵌套文件夹。
    • 官方说:@SpringBootApplication 注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包(也就是与当前启动类同级文件夹的包及其下的所有包,如下图的customer、order包及其下的所有包)。例如,如果你正在编写一个JPA应用程序,你的 @Entity 类只有定义在启动类的子包下才能被扫描加载到。这样的好处也显而易见,@SpringBootApplication 默认只会扫描加载你项目工程中的组件。
    //初始创建的SpringBoot项目的启动类都是如下代码:
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class RestartApplication {
    	public static void main(String[] args) {
    		SpringApplication.run(RestartApplication.class, args);
    	}
    }
    

    初始SpringBoot:详解特性和结构,在这里插入图片描述,第5张

    2.pom文件

    初始SpringBoot:详解特性和结构,在这里插入图片描述,第6张

    • 大多数Spring Boot应用在POM的 parent 部分使用 spring-boot-starter-parent。 spring-boot-starter-parent 是一个特殊的starter,提供有用的Maven默认值。
    • 需要的依赖在 < dependency > 标签内导入需要的< dependeny>
      start
      • Starter是一系列开箱即用的依赖,你可以在你的应用程序中导入它们。 通过你Starter,可以获得所有你需要的Spring和相关技术的一站式服务,免去了需要到处大量复制粘贴依赖的烦恼。
        • 例如,如果你想开始使用Spring和JPA进行数据库访问,那么可以直接在你的项目中导入 spring-boot-starter-data-jpa 依赖。(也就是说现在你想要什么依赖,只需要spring-boot-start-xxx就可以帮你自动导入这方面的所有常规依赖)初始SpringBoot:详解特性和结构,在这里插入图片描述,第7张
      • Starter含了很多你需要的依赖,以使项目快速启动和运行,并拥有一套一致的、受支持的可管理的过渡性依赖。

      例子:

      在idea的终端输入 mvn dependency:tree打印了一个项目依赖的树状图,如下:
      初始SpringBoot:详解特性和结构,在这里插入图片描述,第8张

      你可以看到 spring-boot-starter-parent 本身没有导入什么依赖(就是一些基本的依赖如spring方面的,日志方面的等)。 要导入必须的依赖,需要编辑 pom.xml 文件。

      假如正在开发一个Web应用程序,我们添加一个 spring-boot-starter-web 依赖项:

      
          
              org.springframework.boot
              spring-boot-starter-web
          
      
      

      如果你再次运行 mvn dependency:tree ,你会看到现在有一些额外的依赖,包括Tomcat web服务器等。基本将常规依赖都引入进来了。
      初始SpringBoot:详解特性和结构,在这里插入图片描述,第9张

      parent
      • spring-boot-starter-parent 是一个特殊的starter,它在POM.xml里面声明了spring boot的各个依赖及其版本。子项目直接继承它,子项在导入 spring boot 依赖时,不需要声明版本号。
        • 通俗的说parent部分就是在你导入spring-boot-start–parent时,自动帮你冲裁了版本号,你在dependenys标签里的依赖可以不用写版本号

      提问:不想使用仲裁版本怎么办?

      在pom.xml重写配置,如下面的代码(这里以mysql为例,换成5.1.43版本):

      
      	5.1.43
      
      
      打包

      使用Maven快速打包

      IDEA内终端运行mvn package

      $ mvn package
      [INFO] Scanning for projects...
      [INFO]
      [INFO] ------------------------------------------------------------------------
      [INFO] Building myproject 0.0.1-SNAPSHOT
      [INFO] ------------------------------------------------------------------------
      [INFO] .... ..
      [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
      [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
      [INFO]
      [INFO] --- spring-boot-maven-plugin:3.2.0-SNAPSHOT:repackage (default) @ myproject ---
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      

      初始SpringBoot:详解特性和结构,第10张

      另一种:
      初始SpringBoot:详解特性和结构,在这里插入图片描述,第11张

      运行后你会发现工程内多个target文件夹:
      初始SpringBoot:详解特性和结构,在这里插入图片描述,第12张

      如果你查看 target 目录,你应该看到 项目名-0.0.1-SNAPSHOT.jar

      (没有target可以在从电脑中找到项目文件夹,里面应该能找到target文件夹,在jar包所在文件夹打开电脑终端,运行java -jar 项目名-1.0-SNAPSHOT.jar)

      初始SpringBoot:详解特性和结构,在这里插入图片描述,第13张
      初始SpringBoot:详解特性和结构,在这里插入图片描述,第14张

      IDEA终端运行java -jar target/myproject-0.0.1-SNAPSHOT.jar:

      $ java -jar target/myproject-0.0.1-SNAPSHOT.jar
        .   ____          _            __ _ _
       /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
       \/  ___)| |_)| | | | | || (_| |  ) ) ) )
        '  |____| .__|_| |_|_| |_\__, | / / / /
       =========|_|==============|___/=/_/_/_/
       :: Spring Boot ::  (v3.1.2-SNAPSHOT)
      ....... . . .
      ....... . . . (log output here)
      ....... . . .
      ........ Started MyApplication in 0.999 seconds (process running for 1.253)
      

      要退出应用程序,按 ctrl-c。

      如果你想看看这jar里面到底有什么东西,你可以使用 jar tvf:jar tvf target/项目名-0.0.1-SNAPSHOT.jar

      二、依赖管理特性

      Spring Boot的每个版本都提供了一个它所支持的依赖的列表。 在实践中,你不需要在构建配置中为这些依赖声明版本,因为Spring Boot会帮你管理这些。 当你升级Spring Boot本身时,这些依赖也会一同升级。(所以现在你联系一下parent和start是不是豁然开朗)

      • 开发导入starter场景启动器
        1. spring-boot-starter-* : * 就是某种场景
        2. 只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
        3. 更多SpringBoot所有支持的场景
        4. *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
        所有场景启动器最底层的依赖
        
        	org.springframework.boot
        	spring-boot-starter
        	3.1.2
        	compile
        
        
        • 无需关注版本号,自动版本仲裁

          1. 引入依赖默认都可以不写版本
          2. 引入非版本仲裁的jar,要写版本号。
        • 可以修改默认版本号

          1. 查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
          2. 在当前项目里面重写配置,如下面的代码。
          
          	5.1.43
          
          

          IDEA快捷键:

          • ctrl + shift + alt + U:以图的方式显示项目中依赖之间的关系。
          • alt + ins:相当于Eclipse的 Ctrl + N,创建新类,新包等。

            三、自动配置特性

            • 自动配好Tomcat
              • 引入Tomcat依赖。
              • 配置Tomcat
              
              	org.springframework.boot
                  spring-boot-starter-tomcat
                  3.1.2
                  compile
              
              
              • 自动配好SpringMVC

                • 引入SpringMVC全套组件
                • 自动配好SpringMVC常用组件(功能)
              • 自动配好Web常见功能,如:字符编码问题

                • SpringBoot帮我们配置好了所有web开发的常见场景
                public static void main(String[] args) {
                    //1、返回我们IOC容器
                    ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
                    //2、查看容器里面的组件
                    String[] names = run.getBeanDefinitionNames();
                    for (String name : names) {
                        System.out.println(name);
                    }
                }
                

                初始SpringBoot:详解特性和结构,在这里插入图片描述,第15张

                这里截取了一部分,可以看出里面SpringBoot真的很强大,不需要SSM一样导入一堆依赖。

                • 默认的包结构
                  • 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
                  • 无需以前的包扫描配置
                  • 想要改变扫描路径
                    • @SpringBootApplication(scanBasePackages=“com.dragon”)
                    • @ComponentScan 指定扫描路径
                  @SpringBootApplication
                  等同于
                  @SpringBootConfiguration
                  @EnableAutoConfiguration
                  @ComponentScan("com.lun")