• 欢迎光临~

Spring Boot底层原理

开发技术 开发技术 2022-07-30 次浏览

✨Spring Boot底层原理

  • Spring Boot优点
  • spring boot依赖的版本仲裁中心
  • spring boot启动器(简化maven依赖)
  • 主启动类和主配置类(xxxApplication)
  • 测试类
  • 使用maven构建spring boot项目

📃个人主页: 不断前进的皮卡丘
🌞博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器

Spring Boot优点

  • 简化maven依赖
  • 自动配置
  • 嵌入tomcat

spring boot依赖的版本仲裁中心

我们先创建一个项目
Spring Boot底层原理
我们可以发现它有一个父模块spring-boot-starter-parent

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

我们可以按住CTRL,然后点击去看看
Spring Boot底层原理
我们发现这个父模块,自己还有父模块spring-boot-dependencies

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.2</version>
  </parent>

我们继续点击进去看看
Spring Boot底层原理
这里面定义了很多依赖的版本
Spring Boot底层原理
Spring Boot底层原理
定义了spring boot项目中所有子模块依赖的版本号,称为spring boot的版本的仲裁中心。

spring boot启动器(简化maven依赖)

  • 官方把很多模块功能,封装成了一个个的启动器
  • 命名方式:spring-boot-starter-模块名
  • Spring Boot底层原理

我们点击spring-boot-starter-web,它里面的依赖如下代码所示

  • 添加了spring-web、spring-webmvc等springmvc的依赖
  • 添加了spring-boot-starter-tomcat依赖,嵌入了tomcat(精简版,不支持jsp,启动速度快)
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.7.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.7.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.7.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.22</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.22</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

主启动类和主配置类(xxxApplication)

Spring Boot底层原理
按住ctrl,点击这个注解进去看看

  • @SpringBootApplication
    标注了@SpringBootApplication注解的是程序主入口类和主配置类,它是一个组合注解,包含以下几个主要的注解
    Spring Boot底层原理

    • @SpringBootConfiguration
      它的内部使用了原生注解@Configuration 说明当前类是项目的配置类
      Spring Boot底层原理

    • @EnableAutoConfiguration 开启自动配置
      Spring Boot底层原理

    • @ComponentScan 组件扫描,默认会扫描主配置类所在包下的所有注解
      Spring Boot底层原理

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class";

    boolean useDefaultFilters() default true;

    ComponentScan.Filter[] includeFilters() default {};

    ComponentScan.Filter[] excludeFilters() default {};

    boolean lazyInit() default false;

    @Retention(RetentionPolicy.RUNTIME)
    @Target({})
    public @interface Filter {
        FilterType type() default FilterType.ANNOTATION;

        @AliasFor("classes")
        Class<?>[] value() default {};

        @AliasFor("value")
        Class<?>[] classes() default {};

        String[] pattern() default {};
    }
}

测试类

Spring Boot底层原理
我们可以看到用单元测试,也是可以的,那么什么情况单元测试不好用呢
Spring Boot底层原理
我们创建一个实体类stu
Spring Boot底层原理
然后测试一下,我们发现stu并没有注入进来
Spring Boot底层原理
因为这个时候,我们在单元测试中,并没有把springboot的一些配置整合进来,我们加上@SpringBootTest
Spring Boot底层原理

使用maven构建spring boot项目

Spring Boot底层原理
Spring Boot底层原理
Spring Boot底层原理
pom.xml

<?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>com.zyh.springboot</groupId>
    <artifactId>springboot04_maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--    父模块-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
    </parent>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
<!--模块启动器-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
</project>

添加主程序
先创建一个包,然后把主程序写在这个包下面

Spring Boot底层原理

在配置文件中可以指定端口号等信息
Spring Boot底层原理
编写Controller
Spring Boot底层原理
测试,运行启动类
Spring Boot底层原理

程序员灯塔
转载请注明原文链接:Spring Boot底层原理
喜欢 (0)