SpringBoot主类解析(四)

2023-11-06

SpringBoot主类

import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;

@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class Demo2Application {
    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(Demo2Application.class);
        springApplication.setBannerMode(Banner.Mode.CONSOLE);
        springApplication.run(args);
    }
}

2.@SpringBootApplication

[创建配置类从而代替配置文件]--自动配置方式

@SpringBootApplication注解的源码

3.@SpringBootConfiguration注解

@SpringBootConfigration注解包含了@Configuration注解,@Configuration将这个java类标注为javaConfig配置类,这个是JavaConfig配置类可以代替Spring配置文件。

4.@EnableAutoConfiguration注解

“智能”完成自动配置

可以在SpringBoot应用中,将虽有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器中。

1)@Import:将多个分开配置类【@Configuration类】,合并到一个配置类中。

 2)AutoConfigurationImportSelector.class中getCandidate方法中,加载所有的【Configuration Class】配置类加载

 List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

 3)找到SpringFactoriesLoader.loadFactoryNames方法。

4) 找到“loadSpringFactories”

5) 得到“META-INF/spring.factories”,
spring-boot-autoconfigure-2.6.4.jar/META-INF/spring.factories

 SpringBoot的自动配置原理

1)SpringBoot启动的时候创建主配置类,因为@SpringBootApplication中包含了SpringBootConfigruation,这个注解为我们创建好了主配置类。

2)将其他的的配置类信息合并到主配置类中,@SpringBootApplicaiton中包含@EnableAutoConfiguration注解,@EnableAutoConfigration注解中包含了@Import(AutoConfigrationImportSelector.class)注解,AutoConfigurationImportSelector.class里面的方法getCandidateConfigurations中读取并加载创建spring-boot-autoconfiguration-2.6.4.jar/META-INF/spring.factories文件中的自动配置类。

3)每一个自动配置类进行自动配置功能。

4)根据当前不同的条件判断,决定这个配置类是否生效,一旦这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性对应的properties类中获取的,这学leukemia里面的每一个属性又是配置文件绑定的。

以HttpEncodingAutoConfiguration (Http编码自动配置)为例解释自动配置原理;
/META-INF/spring.factories文件中得到HttpEncodingAutoConfiguration自动配置类
HttpEncodingAutoConfiguration自动配置类的源码:

 第一步:找到自动配置类

 第二步:找到@EnableConfigurationProperties({ServerProperties.class})中的ServerProerties类

@Configuration(proxyBeanMethods = false)
表示这是一个配置类没以前编写的配置文件一样,也可以给容器中添加组件

@EnableConfigurationProperties(ServerProperties.class)
启动指定类的ConfigurationProperties功能,将配置文件中对应的值和HttpEncodingAutoConfigurationProperties绑定起来;

@ConditionalOnWebApplication(type = Type.SERVLET)
Spring底层@Conditional注解,根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效(即判断当前应用是否是web应用)

@ConditionalOnClass(CharacterEncodingFilter.class)
判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码处理的过滤器

 第三步:查看可以在陪指纹键中的配置属性

 所有在配置文件中能配置的属性都是在xxxxPropertites类中封装着,配置文件能配置什么就可以参照某个功能对应的这个属性类;

@ComponentScan 

【配置自动扫描包,就可以让类上带有@Component 和 @Repository,@Service注解的java类创建出对象】
@ComponentScan(basePackages="基础包名称")【主类上】 配置自动扫描包,将java类上带有
@Component("自定义名称"),@Repository("自定义名称"),@Service("自定义名称"),@Controller
注解的java类实例化。
代替了xml配置文件中
<context:component-scan base-package="基础包名称"></context:component-scan>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot主类解析(四) 的相关文章

随机推荐

  • Apache SSHD服务端:ssh2、sftp 登录验证超时时间、连接断开超时时间

    通过ssh2 sftp协议连接基于Apache MINA SSHD的服务时 长时间不用连接会自动断开 我们来看一下默认断开时间和如何修改断开时间 超时报错日志 Disconnecting ServerSessionImpl username
  • ubuntu 服务管理运行程序 sysv-rc-conf

    sysv rc conf是一个强大的服务管理程序 Ubuntu运行级别Linux 系统任何时候都运行在一个指定的运行级上 不同的运行级的程序和服务都不同 所要完成的工作和要达到的目的不同 系统可以在这些运行级之间进行切换 以完成不同的工作
  • socket包长度问题: send recieve(转载)

    一个包没有固定长度 以太网限制在46 1500字节 1500就是以太网的MTU 超过这个量 TCP会为IP数据报设置偏移量进行分片传输 现在一般可允许应用层设置8k NTFS系 的缓冲区 8k的数据由底层分片 而应用看来只是一次发送 win
  • C语言 标识符、合法常量、转义字符

    一 合法标识符 用户定义的合法标识符需满足以下两个要求 标识符只能由字母 数字和下划线组成 标识符不能以数字开头 二 合法常量 整型常量 十进制 10 八进制 017 以0开头 不能出现8 9 十六进制 0xA1 以0x开头 实型常量 强调
  • Mac安装python

    一 下载python 官网地址 https www python org downloads macos 目前主流版本应该是3 7 3 8 3 9 文章以3 8为例 作者已将下载包放到网盘 方便取用 网盘地址 https pan baidu
  • Ngrok 内网穿透

    一 配置Ngrok 准备内网穿透 1 到ngrok官网去注册一个号 国内也有一个sunny ngrok 但是我用来几次全部失败了 所以推荐国外的 网址是 https ngrok com 2 我注册的时候面临验证码刷不出来 所以建议直接用gi
  • MVB通讯机制

    MVB通信只能是主从式通信 主站配置调度表 轮询各从站 从站应答主站命令 采用广播式发送 MVB网络上其他节点过滤地接收网络上的信息 首发 待学习指导
  • elastic-job详解(一):数据分片

    数据分片的目的在于把一个任务分散到不同的机器上运行 既可以解决单机计算能力上限的问题 也能降低部分任务失败对整体系统的影响 elastic job并不直接提供数据处理的功能 框架只会将分片项分配至各个运行中的作业服务器 其实是Job实例 部
  • html表格怎么绑定数据类型,Excel中表格添加数据标签及设置格式的操作方法

    Excel图表以其直观的展示功能深受用户喜爱 但有些初学者对于生成图表后如何添加数据标签有所困扰 今天 学习啦小编就教大家在Excel中表格添加数据标签及设置格式的操作方法 Excel中表格添加数据标签及设置格式的操作步骤如下 1 在Exc
  • Google地图现可按照路况给出出行时间

    在 Google Maps 查询出行路线的时候 不管是公交还是自驾 它都会告诉你一个大概的全部行程需要的时间 不过如果你是在下午 5 点左右从北京出发的话 那个时间显然是痴人说梦 由于 Google Maps 本身在很多城市已经有了交通流量
  • 谷粒商城--整合Elasticsearch和商品的上架

    整合Elasticsearch和商品的上架 一 整合ES ES常用概念 索引 类型 文档是什么 倒排索引 相关度分数score的计算 安装ES和Kibana 快速安装 ES kibana 初步检索 cat ES的增删改查 新增文档 put新
  • 第二天-03-安卓手机的入侵实验

    安卓手机入侵实验 要求 电脑主机与手机模拟器或者真机在当前环境下 网络是畅通的 相互之间可以进行通信 如何进行测试网络环境 我们首先需要确定IP linux通过终端命令 ip a 或者 ifconfig windown下 win加r输入cm
  • Apollo使用404错误问题

    在使用spring项目接入携程 apollo 的时候 报了一个错误 Cause status code 404 Could not find config for namespace appId housing102 cluster def
  • 优化基于FPGA的深度卷积神经网络的加速器设计

    英文论文链接 http cadlab cs ucla edu cong slides fpga2015 chen pdf 翻译 卜居 转载请注明出处 http blog csdn net kkk584520 article details
  • 【开发工具】WebStorm 前端开发神器菜鸟必备,全网最稳定靠谱的安装教程 一镜到底、全程图文并茂、通俗易懂!

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 介绍 WebStorm号称最智能的前端开发IDE 适用于前端开发和相关技术的集成开发
  • Unity世界坐标转换屏幕坐标(详解)

    我们先通过简单的操作实现一下基础的UI跟随物体移动的功能 首先我们在场景中建立一个Canvas并且添加一个图片作为按钮 之后我们添加一个3d物体作为跟随目标 效果如下图所示 我们配置一下UICanvas的属性 书写对应的自定义类并添加至UI
  • 【QT实战】第三章 将类中的成员函数放在多线程中执行

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • css3平移、旋转、倾斜、缩放、动画效果的实现

    HTML代码 div class button div div class canResize esdrtgyjikodrtgujiokpsedtgyhij div div class transition div ul li li li
  • Unity优化总结(持续更新)

    工欲善其事 必先利其器 优先利用性能分析工具快速找出性能瓶颈 从瓶颈入手分析性能问题产生原因 可以事半功倍 尽量减少占用的内存 资源体积 和CPU 计算量 首先着重减少总量才能更好的进行后续细节的优化 总量降低后 性能依旧有问题 那么可以考
  • SpringBoot主类解析(四)

    SpringBoot主类 import org springframework boot Banner import org springframework boot SpringApplication import org springf