Spring Boot底层原理

✨Spring Boot底层原理

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

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

Spring Boot优点

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

spring boot依赖的版本仲裁中心

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

 <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.7.2version>
        <relativePath/> 
    parent>

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

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-dependenciesartifactId>
    <version>2.7.2version>
  parent>

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

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

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

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

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

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

Spring Boot底层原理_第7张图片
按住ctrl,点击这个注解进去看看

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

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

    • @EnableAutoConfiguration 开启自动配置
      Spring Boot底层原理_第10张图片

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

@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 nameGenerator() default BeanNameGenerator.class;

    Class 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底层原理_第12张图片
我们可以看到用单元测试,也是可以的,那么什么情况单元测试不好用呢
Spring Boot底层原理_第13张图片
我们创建一个实体类stu
Spring Boot底层原理_第14张图片
然后测试一下,我们发现stu并没有注入进来
Spring Boot底层原理_第15张图片
因为这个时候,我们在单元测试中,并没有把springboot的一些配置整合进来,我们加上@SpringBootTest
Spring Boot底层原理_第16张图片

使用maven构建spring boot项目

Spring Boot底层原理_第17张图片
Spring Boot底层原理_第18张图片
Spring Boot底层原理_第19张图片
pom.xml


<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.0modelVersion>

    <groupId>com.zyh.springbootgroupId>
    <artifactId>springboot04_mavenartifactId>
    <version>1.0-SNAPSHOTversion>

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.7.2version>
    parent>
    <properties>
        <maven.compiler.source>8maven.compiler.source>
        <maven.compiler.target>8maven.compiler.target>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>
    dependencies>
project>

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

Spring Boot底层原理_第20张图片

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

你可能感兴趣的:(Spring,Boot,spring,boot,java,spring)