浅谈:SpringBoot框架原理《Java-2021面试谈资系列》

说到SpringBoot,大家可能最熟悉的就是:注解开发!自动装配!微服务!可这些大家有没有真正的去从底层了解过呢?今天,小编对自己的Springboot理解进行一个分享,同时也欢迎大家指正!

SpringBoot学习

    • 一、原理解析
      • 1.pom.xml
      • 2.启动器:
      • 3.主程序:
      • 4.注解挖掘!!!【重点】
        • @ComponentScan
        • @SpringBootConfiguration
        • @EnableAutoConfiguration自动装配
          • 1.@AutoConfigurationPackage
          • 2.@Import(AutoConfigurationImportSelector.class)
            • 核心配置文件:
    • 二、Run方法

一、原理解析

1.pom.xml

  • spring-boot-dependencies:核心依赖在父工程中
  • 我们在写或者引入一些springboot依赖的时候,不需要指定版本,因为有版本仓库
  • 浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第1张图片

2.启动器:

<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starterartifactId>
dependency>
  • 启动器:说白了就是springboot的启动场景
  • 比如我们启动web,就可以导入 spring-boot-starter-web,就会自动导入web的依赖
  • springboot会将所有功能场景,变成一个个的启动器
  • 如果我们要使用什么功能,只需要找到对应的启动器就可以

3.主程序:

//@SpringBootApplication:标注这个类是一个springboot的应用
@SpringBootApplication
public class DemoApplication {
     
   public static void main(String[] args) {
     
      SpringApplication.run(DemoApplication.class, args);
   }
}

4.注解挖掘!!!【重点】

大家从启动类上可以看出SpringBoot不像我们之前开发的那样繁琐,仅仅是一个SpringBoot注解就可以解决,那我们就来聊聊这个注解!
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第2张图片
我们先从这里点进去看看:会发现里面核心会有这三个注解,那我们来一 一 看 看
在这里插入图片描述

@ComponentScan

这个注解比较好理解,扫描当前启动类同级的包
我们在学习Spring的时候,应该也是接触过的

@SpringBootConfiguration

当我们点开这个注解会发现一个熟悉的面孔:@Configuration
@Configuration 也是在Spring的学习中就遇见过
@Configuration用于定义配置类,类似于之前的xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第3张图片
当我们再点进去@Configuration,会发现有一个熟悉的面孔:@Component
@Component:组件,放在类上,说明这个类被Spring管理了,就是bean!

等价于:<bean id="user" class="com.wdit.pojo.User"/>
@Component
public class User {
     
    public String name = "乔治";
}

浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第4张图片

@EnableAutoConfiguration自动装配

我们点进来发现,里面会有这样两个核心注解
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第5张图片

1.@AutoConfigurationPackage

浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第6张图片
我们看一个这个类:代码很多,但是理解一下就是
如果有这个Bean,就get
没有,就new一个
说简单了:就是自动注册的一个表
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第7张图片

2.@Import(AutoConfigurationImportSelector.class)

这个注解是自动装配导入包的核心!!!,这个类AutoConfigurationImportSelector,应该是一个包的选择类,我们看看到底选择了什么?
我们研究一下它的几个方法:
方法一:
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第8张图片
方法二:
大家看这个方法,先是loadFactoryNames加载一个类的名字,返回一个集合
然后,注意message的信息!!!
实际上这就是核心配置文件的位置
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第9张图片

核心配置文件:

浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第10张图片
springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只有导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就会配置成功!!!
方法三:
这个方法是Spring工厂类的加载
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第11张图片

二、Run方法

既然是run方法,我们就先看看它的类SpringApplication
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第12张图片
SpringApplication类:

  1. 推断应用的类是普通的项目还是web项目
  2. 查找并加载所有可用初始化器,设置到initializers属性中
  3. 找出所有的应用程序监听器,设置到listeners属性中
  4. 推断并设置main方法的定义类,找到运行的主类

核心就是用了JavaConfig
浅谈:SpringBoot框架原理《Java-2021面试谈资系列》_第13张图片

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