Spring Boot核心原理
Spring Boot核心原理
spring-boot-starter-xxx 方便开发和配置
@SpringBootApplication //注解
public class Springbootdemo1Application { public static void main(String[] args) {
//严格意义上执行的是这块代码
SpringApplication.run(Springbootdemo1Application.class, args);
} }
一、 SpringBootApplication注解
注解的功能:参考https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-documentation

除了元注解,还有三个注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan( excludeFilters =
{@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
@SpringBootConfiguration 注解

让我们当前的Bean叫给Spring容器进行管理(IOC),让当前类变成配置类,不需要XML文件进行配置(配置类)。
EnableAutoConfiguration注解

@AutoConfigurationPackage
让包中的类以及子包中的类能被自动扫描到Spring 容器中
@Import({AutoConfigurationImportSelector.class})
程序中默认使用的类帮我们找到
AutoConfigurationImportSelector类如下: 里面的selectImports里面,调用了getAutoConfigurationEntry方法。

getAutoConfigurationEntry方法中调用getCandidateConfigurations方法

getCandidateConfigurations方法使用的文件在META-INF/spring.factories

META-INF/spring.factories保存了系统默认加载进来的类。
这个文件的路径如下图:

@ComponentScan注解
通常它会结合@Coponent相关东西进行使用 总结:@SpringBootApplication
结合Spring MVC:
系统可能用到的Bean,帮我们放在了spring.factories 文件夹中
自己需要加载的bean, @Component结合@ComponentScan
二、 SpringApplication.run(Springbootdemo1Application.class, args);
程序启动的时候执行这段代码,
1、寻找内置的Tomcat执行的地方
this.refreshContext(context);
this.refresh(context);
((AbstractApplicationContext)applicationContext).refresh();
this.onRefresh()
onRefresh(ServletWebServerApplicationContext类中)
this.createWebServer();
factory.getWebServer
最终找到内置创建Tomcat的方法

2、@SpringBootApplicaton注解是如何准备类的? 如何理解spring.factories准备的类,然后拿到准备类去创建具体的对象?
SpringApplication.run(Springbootdemo1Application.class, args): 拿到准备类中的文件--> 具体创建对象
以下图创建Tomcat实例为例

spring.factories中有一个与TomcatServletWebServerFactory相关的配置: ServletWebServerFactoryAutoConfiguration

ServletWebServerFactoryAutoConfiguration类如下

可以看到@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})。
然后进入EmbeddedTomcat类

自动配置:auto-configuration
注解在spring.factories中帮你维护好了所谓的全路径
代码执行的过程中你会用到的话,就会寻找对应的类
Spring Boot核心原理的更多相关文章
- Spring Boot 运作原理
Spring Boot 运作原理 1.Spring Boot 简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了 ...
- Spring Boot启动原理解析
Spring Boot启动原理解析http://www.cnblogs.com/moonandstar08/p/6550758.html 前言 前面几章我们见识了SpringBoot为我们做的自动配置 ...
- Spring Boot运行原理
概述 本文主要写了下Spring Boot运行原理,还有一个小例子. Spring4.x提供了基于条件来配置Bean的能力,而Spring Boot的实现也是基于这一原理的. Spring Boot关 ...
- spring boot启动原理步骤分析
spring boot最重要的三个文件:1.启动类 2.pom.xml 3.application.yml配置文件 一.启动类->main方法 spring boot启动原理步骤分析 1.spr ...
- 3个Spring Boot核心注解,你知道几个?
Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...
- Spring Boot 核心注解与配置文件
@SpringBootApplication注解 Spring Boot项目有一个入口类 (*Application) 在这个类中有一个main 方法,是运行该项目的切入点.而@SpringBootA ...
- 【SpringBoot】15. Spring Boot核心注解
Spring Boot核心注解 1 @SpringBootApplication 代表是Spring Boot启动的类 2 @SpringBootConfiguration 通过bean对象来获取配置 ...
- Spring Boot 核心配置文件 bootstrap & application
Spring Boot 核心配置文件 bootstrap & application 1.SpringBoot bootstrap配置文件不生效问题 2.bootstrap/ applicat ...
- Spring boot运行原理-自定义自动配置类
在前面SpringBoot的文章中介绍了SpringBoot的基本配置,今天我们将给大家讲一讲SpringBoot的运行原理,然后根据原理我们自定义一个starter pom. 本章对于后续继续学习S ...
随机推荐
- Wireshark 分析Linux SSh 远程登录延迟问题
1.PuTTy远程登录延迟的分析 现象问题描述:在使用kali linux 的时候喜欢在后台运行而在Windows主机系统上安装PuTTY来实现远程登录 发现每次输入密码的时候会存在延迟10s的情况, ...
- dns服务器正向解析配置
DNS服务器的配置 一.安装软件 1.安装bind.bind-utils软件,起服务,设置开机启动. bind-utils软件用于提供nslookup功能,用于测试dns是否搭建成功,能够正常解析. ...
- MySQL的My.cnf模板(转)
[client] default-character-set = utf8mb4 port = PORT socket = /srv/myPORT/run/mysql.sock [mysqld] us ...
- [MySQL] 行级锁SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE
一.译文 翻译来自官方文档:Locking Reads If you query data and then insert or update related data within the same ...
- java.lang.NoClassDefFoundError: org/apache/zookeeper/proto/SetWatches
Session 0x16b21fa441900b6 for server 192.168.240.126/192.168.240.126:2181, unexpected error, closing ...
- Shell排序——软考(五)
希尔排序是一种插入排序,是对直接插入排序的一种改进,该算法出自于D.L.Shell,因此得名为希尔.Shell排序又名缩小增量排序. 思想 假设初始序列为n个元素,先取一个小于n的整数d1作 ...
- linux第三天
一.用户的类型 1.root管理员:所有权限(r w x) 2.文件拥有者(u):谁创建谁拥有 3.组 (g):用户组 4.其它用户(o):不属于用户组,也不是文件的创建者,不是管理员 ...
- GITHUB使用指南、
一.安装Git1.通过官网(https://www.git-scm.com/download/)下载git,进入官网,如下图所示:2.选择对应的操作系统后,页面跳转并自动下载对应的Git版本,如下图所 ...
- Linux命令基础5-文件重定向
文件描述符是和文件的输入.输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descriptor)来访问文件.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也 ...
- netty: 解决粘包拆包: 分隔符DelimiterBasedFrameDecoder,定长消息FixedLengthFrameDecoder
DelimiterBasedFrameDecoder 自定义分隔符 给Server发送多条信息,但是server会讲多条信息合并为一条.这时候我们需要对发生的消息指定分割,让client和server ...