【理解springboot自动装配原理】

2023-11-20

理解springboot自动装配原理:

最近读了小马哥(mercyblitz)Springboot编程思想(核心篇),有了一些心得和感悟,分享给大家:

1. 官网介绍了激活自动装配的方法:
* 文档提到激活自动化装配的注解 @EnableAutoConfiguration 和 @SpringBootApplication,
* 将二者选其之一标注在 @configuration 类上,但并没有说明如何装配@Configuration 类,
* 如果熟悉Spring Framework,会想到三种方法,即:
XML元素<context:component-scan>、注解 @Import 和 @ComponentScan,
而这三种装配手段又需要Spring应用上下文引导,
前者可采用ClassPathXmlApplicationContext加载,后两者需要AnnotationConfigApplicationContext注册。
2. 理解 @SpringBootApplication 注解语义:
* @SpringBootApplication 被用于激活
@EnableAutoConfiguration、@ComponentScan 和@Configuration三个注解的特性。
其中,@EnableAutoConfiguration 负责激活 Spring Boot自动装配机制,
@ComponentScan 激活@component的扫描,@Configuration声明被标注为配置类。
* 官方源码告诉我们 @SpringBootApplication 注解等同于 
@EnableAutoConfiguration、@Configuration、@ComponentScan注解,且他们均使用默认属性,
* 以Spring Boot 2.0.2.Release实现为例,实际上 @SpringBootApplication 等价于
@EnableAutoConfiguration、@ComponentScan注解、@SpringbootConfiguration,
不过@ComponentScan 并非使用了默认值,而是添加了排除的TypeFilter实现:TypeExcludeFilter 和AutoConfigurationExcludeFilter,
前者是由Spring Boot1.4引入,用于查找BeanFactory中已注册的TypeExcludeFilter Bean,作为代理执行对象,
而后者从SpringBoot 1.5 开始支持,用于排除其他同时标注@Configuration 和@EnableAutoConfiguration 的类。
* 从SpringBoot 1.4 开始,@SpringBootApplication 注解不再标注Configuration,
而是@SpringbootConfiguration,不过两者在运行上没有差异,类似于对象之间的继承,
@Configuration注解上标注了@Component,@Configuration 实际上是@Component 的派生注解,
同理,@SpringbootConfiguration 标注了@Configuration。
* 因此三者之间的层次关系如下:
 @Component,
        @Configuration,
              @SpringbootConfiguration。 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【理解springboot自动装配原理】 的相关文章

  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 是否有任何简单(且最新)的 Java 框架可用于在 Swing 应用程序中嵌入电影?

    我正在构建一个小型 Swing 应用程序 我想在其中嵌入一部电影 重要的是 这个应用程序是一个 WebStart 应用程序 并且该库应该能够打包在我启动的 jnlp 中 即 不依赖于本机库 我知道并尝试过 JMF 但我认为与其他框架相比 其
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐

  • 基本定时器

    include stm32f4xx h LED灯初始化 void LED Init void GPIO InitTypeDef GPIO InitStructure RCC AHB1PeriphClockCmd RCC AHB1Periph
  • 基于朴素贝叶斯的图像分类

    朴素贝叶斯是一种极其简单的分类算法 通过概率统计到的方式进行判别 通过特征的联合概率分布P w1 w2 w3 wn C 进行建模 进而得到P C w1 w2 w3 wn 进而转换成一种监督分类的算法 贝叶斯公式 目标是根据特征得到属于某一类
  • c++ connect函数连接失败 解决方法

    bool Connect 初始化网络 WSADATA wsadata WSAStartup MAKEWORD 2 2 wsadata if 0 WSAStartup MAKEWORD 2 2 wsadata return false if
  • IntelliJ IDEA 插件(Java 插件)简介(一)

    IntelliJ IDEA 被认为是当前Java开发效率最快的 IDE 工具 它整合了开发过程中众多的实用功能 具有丰富的插件支持 能够极大地提高开发效率 一 Alibaba Java Coding Guidelines Alibaba J
  • 快速学习Python基础知识(3)

    一 输入输出 1 1 input输入函数的使用 input函数 是获取键盘输出 保存成一个字符串 注意 input 函数的返回值是一个字符串类型 即便你输入的是数字 返回的也会以一个字符串的形式返回给我们 inputStr input 提示
  • 电路的频率响应

    文章目录 Frequency response Impedence Transfer function The Decibel scale First order circuits Series RL and RC circuits Ser
  • 3. C++ 数据类型

    目录 1 七种基本的 C 数据类型 2 C 中的变量定义 3 C 中的变量声明 4 C 变量作用域 局部变量 全局变量 1 七种基本的 C 数据类型 各种变量类型在内存中存储值时需要占用的内存 以及该类型的变量所能存储的最大值和最小值 注意
  • @ControllerAdvice 和 @ExceptionHandler注解处理全局异常

    ControllerAdvice 和 ExceptionHandler注解处理全局异常 处理全局统一异常 处理service层抛出异常的方法 异常体系 处理全局统一异常 在构建RestFul接口的今天 我们一般会限定好返回数据的格式 有利于
  • Nmap使用方法

    文章目录 1 Nmap简介 2 Nmap使用方法 3 扫描技术 4 端口指定和扫描顺序 5 举例 5 1 简单扫描 nmap ip 5 2 全面扫描 nmap A ip 5 3 探测指定端口的开放状态 5 4 探测N个最有可能开放的端口 5
  • 升级SQLite数据库

    一 步骤 1 在之前的基础上添加一张Category表 在onCreate 方法中执行建CREATE CATEGORY表语句 2 然后在onUpgrade 中执行两条drop语句 发现数据库表存在 就将已经存在的表格删除 再在onCreat
  • CISSP一次通过指南(文末附福利)

    2017年12月19日 在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试 拖拉了一年 终于成绩还算令人满意 为攒人品将自己一年多的复习心得和大家分享 希望能够帮到需要考证的朋友 本文作者 i春秋签约作家 tinyfisher 欢迎与
  • 【JavaWeb】网络原理初识

    网络原理初识 计算机网络的历史 局域网和广域网 网络组件中的重要设备 网络通信基础 基本概念 协议分层 OSI七层模型 TCP IP五层 或四层 模型 封装和分用 发送方 接收方 三层转发和二层转发 计算机网络的历史 计算机最初是为了打仗而
  • python基础之数据类型知识(1)

    注释 注解 解释 说明文字而已 特征 注释只是用于说明的文字不会影响内容本身 作用 1 用于添加说明文字 方便阅读 2 用于调试程序 排查错误 分类 单行注释 多行注释 内容 或者 内容 代码 print hello world print
  • 利用JS实现简单的todoList(记事本)效果

    目录 1 实现效果展示 2 HTML代码 3 CSS代码 4 Javascript代码 该记事本程序利用HTML CSS JavaScript前端三大框架来实现 实现了记事本的添加 已完成和删除待办事项的基本功能 下面是程序实现的全部代码
  • 交通类SCI顶级期刊排名

    大多数期刊还是在IEEE http ieeexplore ieee org 或者ScienceDirect https www sciencedirect com 上面的 如果你是学生的话 可能从你们学校的图书馆可以进到这些网站去下载论文
  • Vue js引用警告 “export ‘default‘ (imported as ‘xxx‘) was not found

    问题原因 ES6 编译器识别问题 如果在public js这样写会有警告export default imported as xxx was not found export const myMixin 解决办法 修改组件中引用js的地方
  • Linux TCP链接查看和调整

    查看Linux的TCP连接数的方法如下 统计80端口连接数 netstat nat grep i 80 wc l 统计httpd协议连接数 ps ef grep httpd wc l 统计已连接上的 状态为 established 的TCP
  • Java终止线程的三种方式

    停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作 也就是放弃当前的操作 在 Java 中有以下 3 种方法可以终止正在运行的线程 使用退出标志 使线程正常退出 也就是当 run 方法完成后线程中止 使用 stop 方法强行终止线
  • R----dplyr包介绍学习

    dplyr包 plyr包的替代者 专门面对数据框 将ddplyr转变为更易用的接口 gt 来自dplyr包的管道函数 其作用是将前一步的结果直接传参给下一步的函数 从而省略了中间的赋值步骤 可以大量减少内存中的对象 节省内存 可惜的是应用范
  • 【理解springboot自动装配原理】

    理解springboot自动装配原理 最近读了小马哥 mercyblitz Springboot编程思想 核心篇 有了一些心得和感悟 分享给大家 1 官网介绍了激活自动装配的方法 文档提到激活自动化装配的注解 EnableAutoConfi