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

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

一、原理解析

1.pom.xml

  • spring-boot-dependencies:核心依赖在父工程中
  • 我们在写或者引入一些springboot依赖的时候,不需要指定版本,因为有版本仓库
  • 在这里插入图片描述

2.启动器:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
</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注解就可以解决,那我们就来聊聊这个注解!
在这里插入图片描述
我们先从这里点进去看看:会发现里面核心会有这三个注解,那我们来一 一 看 看
在这里插入图片描述

@ComponentScan

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

@SpringBootConfiguration

当我们点开这个注解会发现一个熟悉的面孔:@Configuration
@Configuration 也是在Spring的学习中就遇见过
@Configuration用于定义配置类,类似于之前的xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
在这里插入图片描述
当我们再点进去@Configuration,会发现有一个熟悉的面孔:@Component
@Component:组件,放在类上,说明这个类被Spring管理了,就是bean!

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

在这里插入图片描述

@EnableAutoConfiguration自动装配

我们点进来发现,里面会有这样两个核心注解
在这里插入图片描述

1.@AutoConfigurationPackage

在这里插入图片描述
我们看一个这个类:代码很多,但是理解一下就是
如果有这个Bean,就get
没有,就new一个
说简单了:就是自动注册的一个表
在这里插入图片描述

2.@Import(AutoConfigurationImportSelector.class)

这个注解是自动装配导入包的核心!!!,这个类AutoConfigurationImportSelector,应该是一个包的选择类,我们看看到底选择了什么?
我们研究一下它的几个方法:
方法一:
在这里插入图片描述
方法二:
大家看这个方法,先是loadFactoryNames加载一个类的名字,返回一个集合
然后,注意message的信息!!!
实际上这就是核心配置文件的位置
在这里插入图片描述

核心配置文件:

在这里插入图片描述
springboot所有的自动配置都是在启动的时候扫描并加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只有导入对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就会配置成功!!!
方法三:
这个方法是Spring工厂类的加载
在这里插入图片描述

二、Run方法

既然是run方法,我们就先看看它的类SpringApplication
在这里插入图片描述
SpringApplication类:

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

核心就是用了JavaConfig
在这里插入图片描述

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值