ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot运行原理

2022-01-02 22:57:59  阅读:128  来源: 互联网

标签:xml springboot spring 配置 扫描 注解 原理 运行 加载


1.spring的衍生注解

@ComponentScan

前提程序能扫描加载这个注解,可以代替xml中

<context:component-scan basepackage="cn.tedu">标签,

这个注解所在的类所在包就是base-package的值•

@Configuration

前提程序能扫描加载这个注解将一个spring的xml配置文件的内容转化成代码内容完成的配置类注解;代替一个独立的xml,在xml中所需要配置的所有<bean>,可以在这个类以@Bean表示

@ConfigurationProperties

前提是被容器扫描加载到,可以根据这个注解的配置读取properties文件中的key=value的数据内容;一般配合Component注解实现加载;

@ConditionalOnClass({A.class,B.class})

spring4.x出现的一个重要的自动配置的衍生注解,条件注解,前提扫描到条件注解时,根据加载的A.class,B.class判断当前配置是否生效,配合@Configuration完成

springboot启动顺序和run简析

独立运行虽然成功了,但是扫描的内容怎么加载?run方法的逻辑解决了spring容器的独立运行问题核心注解@SpringBootApplication

这个注解是一个组合注解

@ComponentScan:启动类上添加的核心注解作用之一,对自定义的代码实现扫描范围的约束(启动类的同级包,下级包的所有spring注解的扫描)

springboot自动配置,根据依赖加载configuration类逻辑

@EnableAutoConfiguration:开启自动配置;所有依赖中需要配置springboot的情况都会在包中传递一个**.**.autoconfigure的jar包,例如我们依赖的starter-web就传递了一个spring-bootautoconfigure的jar包

在包的META-INF文件夹中,存在一个spring.factories的文件,当前依赖的自动配置想要让springboot加载的所有配置类信息

@EnableAutoConfiguration一旦被扫描,直接注入一个创建的seletor类

打开EnableAutoConfigurationImportSelector进入父类,在父类中,有一个核心方法selectImport选择导入的资源,就会根据依赖传递过来的所有**.**.autoconfigure的jar包中spring.factories的文件的内容加载所有配置

@SpringBootConfiguration

标识启动类也是配置类(配置类中有@ComponentScan就相当于xml里有个componet-scan标签)

application.properties(全局配置文件)

banner.txt(启动横幅字符串)

bootstrap.properties(配置客户端的加载文件) 

springboot的启动原理总结

spring在升级的过程中,一个很重要的趋势--简化配置;4.x几乎将所有xml配置转化到了代码注解(java1.5注解技术);

启动顺序

  • run方法调用,独立运行spring容器
  • 核心注解被扫描并且加载

@ComponentScan:扫描自定义的一些满足扫描范围约束的类

@EnableAutoConfiguration:启动自动配置,根据依赖内容加载该加载,该创建的东西

@SpringBootConfiguration:标识启动类也是配置类,同时加载一些资源文件的工作

  •  实现结果:

自动配置:

自动扫描自定义代码所有的spring-springmvc注解根据依赖完成改配置的内容(根据依赖传递的一个autoconfigure,一个是依赖中的类条件)

标签:xml,springboot,spring,配置,扫描,注解,原理,运行,加载
来源: https://blog.csdn.net/m0_53198872/article/details/122282129

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有