SpringBoot自动配置类

SpringBoot的@Conditional和自动配置类生效 @Conditional原理    在之前的博客中提到了关于自动配置的原理,但是在自动配置的时候有很多的判断,只有当这些判断都成功之后在自动配置的时候才会成功。但是我们会发现一个问题,当我们使用@Bean注解往容器中添加组件的时候也会有很多的判断。这里我们还是以HttpEncodingAutoConfiguration自动注解来说。在HttpEncodingAutoConfiguration类中有... 阅读详情

9 自动配置类

9.1 xxxAutoConfiguration

以HttpEncodingAutoConfiguration为例解释

2.7.6的配置类所在的文件无法直接点进去,可以Ctrl+N 直接搜索全类名,即可找到对应的文件,或者是在下图这个位置找到全类名对应的包名

下面这个代码是2.7.6的代码

// 1. @AutoConfiguration:2.7+ 版本新增,替代旧版 @Configuration 标记自动配置类
// 作用:明确当前是 Spring Boot 自动配置类,优先级高于普通 @Configuration 类,确保自动配置流程优先执行
// 自动装配影响:必须有此注解,否则无法被 Spring Boot 自动配置机制扫描加载
@AutoConfiguration 

// 2. @EnableConfigurationProperties({ServerProperties.class}):2.7.6 版本变更(替代旧版 HttpEncodingProperties)
// 作用:① 启用 ServerProperties 类的 @ConfigurationProperties 功能,使其能读取 application.yaml 中 "server." 前缀配置;
//      ② 将 ServerProperties 实例(已绑定配置值)注册到容器,供构造器注入
// 自动装配影响:无此注解,下面的 properties 参数无法获取值,配置类初始化失败
@EnableConfigurationProperties({ServerProperties.class}) 

// 3. @ConditionalOnWebApplication(type = Type.SERVLET):Spring 条件注解(2.7.6 明确 Web 类型)
// 核心作用:判断当前应用是否为「Servlet 类型 Web 应用」(即传统 Spring MVC 应用,区别于 WebFlux 响应式应用)
// 判断标准:类路径中存在 Servlet 相关类(如 javax.servlet.Servlet)、容器是 Servlet 容器(如 Tomcat)
// 生效结果:
// - 满足(Servlet Web 应用):配置类继续往下执行;
// - 不满足(纯 Java 项目/ WebFlux 项目):整个配置类失效,不会注册任何 Bean(乱码过滤器、自定义器都不加载)
// 自动装配影响:非 Servlet Web 场景,自动装配直接跳过
@ConditionalOnWebApplication(
    type = Type.SERVLET
)

// 4. @ConditionalOnClass({CharacterEncodingFilter.class}):Spring 条件注解(核心依赖判断)
// 核心作用:判断当前项目类路径中,是否存在 CharacterEncodingFilter 类(Spring MVC 内置乱码处理过滤器)
// 判断标准:项目是否引入 spring-webmvc 依赖(该类在 spring-webmvc.jar 中,引入 spring-boot-starter-web 会自动传递)
// 生效结果:
// - 满足(存在该类):配置类继续执行;
// - 不满足(未引入 web 依赖):整个配置类失效,乱码过滤器无法自动装配
// 自动装配影响:缺少依赖时,自动装配失败(需手动引入 spring-boot-starter-web)
@ConditionalOnClass({CharacterEncodingFilter.class})

//5. @ConditionalOnProperty(prefix = "server.servlet.encoding", value = {"enabled"}, matchIfMissing = true):Spring 条件注解(配置开关判断)
// 核心作用:判断 application.yaml 中「server.servlet.encoding.enabled」配置项的状态(2.7.6 配置前缀变更,旧版是 spring.http.encoding)
// 判断标准:
// - 配置了「server.servlet.encoding.enabled=true」→ 满足;
// - 配置了「server.servlet.encoding.enabled=false」→ 不满足;
// - 未配置该属性 → 因 matchIfMissing=true,默认满足
// 生效结果:
// - 满足:配置类继续执行,乱码过滤器会被注册;
// - 不满足:配置类失效,乱码过滤器不自动装配
// 自动装配影响:默认自动生效,可通过配置手动关闭(体现「配置大于约定」)
//这个prefix就是yml配置文件写的那些值,写的时候 idea会提示默认值
@ConditionalOnProperty(
    prefix = "server.servlet.encoding",
    value = {"enabled"},
    matchIfMissing = true
)

// 核心配置类:处理 Servlet Web 应用的 HTTP 编码自动配置
// 生效前提:上面 3、4、5 三个 Conditional 注解必须「同时满足」,否则整个类失效
public class HttpEncodingAutoConfiguration {

    // 6. 成员变量properties:从 ServerProperties 中获取 servlet.encoding 相关配置(2.7.6 整合后的属性存储)
    private final Encoding properties;

    // 7. 有参构造器:注入 ServerProperties 实例,提取 encoding 配置
    // 作用:Spring 自动从容器中获取 ServerProperties,通过 getServlet().getEncoding() 拿到编码配置
    // 自动装配影响:获取不到 ServerProperties 会报错(需 @EnableConfigurationProperties 注解)
    public HttpEncodingAutoConfiguration(ServerProperties properties) {
        this.properties = properties.getServlet().getEncoding();
    }

    // 8. @Bean:向容器注册 CharacterEncodingFilter Bean(乱码处理核心组件)
    // 自动装配影响:无此注解,过滤器无法被注册到容器
    @Bean

    // 9. @ConditionalOnMissingBean:Spring 条件注解(用户优先级判断)
    // 核心作用:判断容器中是否「已经存在 CharacterEncodingFilter 类型的 Bean」(包括用户手动注册的)
    // 判断标准:容器中无该类型 Bean → 满足;有则不满足
    // 生效结果:
    // - 满足(无用户自定义 Bean):当前 @Bean 生效,注册 Spring Boot 默认的乱码过滤器;
    // - 不满足(有用户自定义 Bean):当前 @Bean 失效,优先使用用户注册的过滤器
    // 自动装配影响:体现「用户配置优先于自动配置」,避免重复注册
    @ConditionalOnMissingBean
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
        filter.setEncoding(this.properties.getCharset().name()); // 编码格式(默认 UTF-8,可通过 server.servlet.encoding.charset 配置)
        filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.REQUEST)); // 强制请求编码(默认跟随配置)
        filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.web.servlet.server.Encoding.Type.RESPONSE)); // 强制响应编码(默认跟随配置)
        return filter;
    }

    // 10. @Bean:注册 LocaleCharsetMappingsCustomizer Bean(用于自定义 Tomcat 容器的语言-字符集映射)
    @Bean
    public HttpEncodingAutoConfiguration.LocaleCharsetMappingsCustomizer localeCharsetMappingsCustomizer() {
        return new HttpEncodingAutoConfiguration.LocaleCharsetMappingsCustomizer(this.properties);
    }

    // 内部静态类:Web 服务器工厂自定义器,用于配置容器的语言-字符集映射
    static class LocaleCharsetMappingsCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>, Ordered {
        private final Encoding properties;

        LocaleCharsetMappingsCustomizer(Encoding properties) {
            this.properties = properties;
        }

        public void customize(ConfigurableServletWebServerFactory factory) {
            // 若配置了 server.servlet.encoding.mapping(语言-字符集映射),则应用到容器
            if (this.properties.getMapping() != null) {
                factory.setLocaleCharsetMappings(this.properties.getMapping());
            }
        }

        public int getOrder() {
            return 0; // 执行优先级:最高(确保映射配置先于其他容器配置生效)
        }
    }
}

问 1:2.7.6 中,HttpEncodingAutoConfiguration 生效的前提是什么?

答:三个条件必须同时满足:① 是 Servlet 类型 Web 应用;② 引入 web 依赖(类路径有 CharacterEncodingFilter);③ 未关闭 server.servlet.encoding.enabled 配置(默认开启)。

问 2:如果我手动注册了 CharacterEncodingFilter,自动配置还会生效吗?

答:不会。@ConditionalOnMissingBean 会检测到容器中已有该 Bean,默认过滤器的 @Bean 会失效,优先使用用户自定义的过滤器。

问 3:如何手动关闭这个自动配置类?

答:两种方式:① 配置文件中添加 server.servlet.encoding.enabled=false;② 主程序类用 @SpringBootApplication(exclude = HttpEncodingAutoConfiguration.class) 排除。
注:在配置文件中加入debug=true属性,启动项目后,可以在控制台看到那些自动配置类生效;
但是其他旧版本中的不是这个。

    9.2 xxxProperties

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

    9.2.1字符编码配置

    以2.7.6的ServerProperties中字符编码的配置为例。
    核心结论
    Spring Boot 2.7.6 的字符编码配置,本质是通过 Encoding 类封装默认值 / 配置值,再通过 ServerProperties 关联配置文件,最终由 HttpEncodingAutoConfiguration 注册过滤器生效—— 默认值 “在 Encoding 里设定”,正是框架设计的核心:Encoding 是编码配置的 “容器”,默认值、配置文件值都存在这里,而非直接写在 properties 文件里。
    一、三层关联逻辑(从配置到生效)
    先理清 Encoding → ServerProperties → HttpEncodingAutoConfiguration 的关系,就懂了 “编码在哪设、怎么生效”:
    1. Encoding 类:编码配置的 “数据载体”,存储编码相关的默认值、从配置文件读取的值(如字符集、是否强制编码);
    2. ServerProperties 类:作为 “配置枢纽”,通过内部 Servlet 子类关联 Encoding,并绑定配置文件 server.servlet.encoding 前缀;
    3. HttpEncodingAutoConfiguration 类:自动配置类,注入 ServerProperties 后提取 Encoding 配置,注册 CharacterEncodingFilter 过滤器,让编码配置生效。
    二、逐类解析(重点讲编码相关核心逻辑)

    Encoding 类:编码配置的 “容器”(默认值 + 配置值都在这)

    package org.springframework.boot.web.servlet.server;
    
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.util.Locale;
    import java.util.Map;
    
    public class Encoding {
        public static final Charset DEFAULT_CHARSET; // 静态常量:默认字符集
        private Charset charset; // 字符集(默认UTF-8,可通过配置文件覆盖)
        private Boolean force; // 是否强制所有编码(请求+响应)
        private Boolean forceRequest; // 是否强制请求编码
        private Boolean forceResponse; // 是否强制响应编码
        private Map<Locale, Charset> mapping; // 语言-字符集映射(如中文→GBK)
    
        // 构造器:初始化默认字符集
        public Encoding() {
            this.charset = DEFAULT_CHARSET; // 默认值:UTF-8
        }
    
        // 核心方法:判断是否强制指定类型(请求/响应)的编码,这个方法的具体调用在HttpEncodingAutoConfiguration里的CharacterEncodingFilter方法
        //我会传入不同的类型(请求/响应),然后根据类型的不同,设置编码
        public boolean shouldForce(Encoding.Type type) {
            // 步骤1:先查“单独配置”(针对请求/响应的专用开关)
            Boolean force = type != Encoding.Type.REQUEST ? this.forceResponse : this.forceRequest;
        
            // 步骤2:如果单独配置为null(未设置),则用“全局配置”
            if (force == null) {
                force = this.force; 
            }
        
            // 步骤3:如果全局配置也为null(未设置),则用“默认规则”
            if (force == null) {
                force = type == Encoding.Type.REQUEST; // 请求默认true(强制请求编码),响应默认false(不强制响应编码)
            }
        
            return force;
        }
    
        // 静态代码块:初始化默认字符集为UTF-8(硬编码的默认值)
        static {
            DEFAULT_CHARSET = StandardCharsets.UTF_8;
        }
    
        // 枚举:区分请求/响应编码类型
        public static enum Type {
            REQUEST, RESPONSE;
        }
    
        // getter/setter:用于绑定配置文件值(省略,核心是charset、force等属性)
    }
    • 核心作用:专门存储编码相关的配置,相当于 “编码配置的 JavaBean”;
    • 默认值来源:
      • 字符集:DEFAULT_CHARSET = StandardCharsets.UTF_8(静态代码块硬编码);
      • 强制编码:默认只强制请求编码(shouldForce 方法逻辑);
    • 配置值来源:通过 ServerProperties 的 @ConfigurationProperties 注解,读取 application.yaml 中 server.servlet.encoding 前缀的配置(如 server.servlet.encoding.charset=GBK),覆盖默认值。
    • 优先级公式:forceRequest/forceResponse(单独配置) > force(全局配置) > 默认值(请求true/ 响应false);

    ServerProperties 类:编码配置的 “枢纽”(关联配置文件和 Encoding)

    package org.springframework.boot.autoconfigure.web;
    
    // 关键注解:绑定配置文件中 "server." 前缀的配置
    @ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
    public class ServerProperties {
        // 内部静态类:封装 Servlet 相关配置(包括编码)
        public static class Servlet {
            // 核心:关联 Encoding 类(@NestedConfigurationProperty 表示嵌套配置)
            @NestedConfigurationProperty
            private final Encoding encoding = new Encoding();
    
            // getter:供 HttpEncodingAutoConfiguration 提取编码配置
            public Encoding getEncoding() {
                return this.encoding;
            }
        }
    
        // Servlet 实例(初始化时会创建内部的 Encoding 实例)
        private final ServerProperties.Servlet servlet;
    
        // 构造器:初始化 Servlet 实例(进而初始化 Encoding 实例)
        public ServerProperties() {
            this.servlet = new ServerProperties.Servlet();
            // 其他属性初始化...
        }
    
        // getter:供 HttpEncodingAutoConfiguration 注入后获取 Servlet 配置
        public ServerProperties.Servlet getServlet() {
            return this.servlet;
        }
    
        // 其他服务器配置(端口、SSL等,省略)
    }
    • 核心作用:作为 “配置枢纽”,一边绑定配置文件 server. 前缀,一边通过内部 Servlet 类关联 Encoding;
    • 编码配置的绑定逻辑:
      • 当你在 application.yaml 写 server.servlet.encoding.charset=GBK 时,@ConfigurationProperties 会自动将该值注入到 Servlet 类的 encoding 属性中;
      • 若不配置,encoding 会使用自身构造器的默认值(UTF-8);
    • 关键注解:@NestedConfigurationProperty 表示 encoding 是嵌套配置,允许配置文件用 server.servlet.encoding.xxx 的层级格式。

    HttpEncodingAutoConfiguration 类:编码配置的 “生效器”(注册过滤器)

    package org.springframework.boot.autoconfigure.web.servlet;
    
    @AutoConfiguration // 2.7+ 自动配置类标识
    @EnableConfigurationProperties({ServerProperties.class}) // 启用 ServerProperties 的配置绑定
    @ConditionalOnWebApplication(type = Type.SERVLET) // 仅 Servlet Web 应用生效
    @ConditionalOnClass({CharacterEncodingFilter.class}) // 存在乱码过滤器类才生效
    @ConditionalOnProperty(prefix = "server.servlet.encoding", value = {"enabled"}, matchIfMissing = true) // 默认启用
    public class HttpEncodingAutoConfiguration {
        private final Encoding properties; // 编码配置(从 ServerProperties 提取)
    
        // 构造器:注入 ServerProperties,提取 Servlet 中的 Encoding 配置
        public HttpEncodingAutoConfiguration(ServerProperties properties) {
            this.properties = properties.getServlet().getEncoding();
        }
    
        // 注册乱码过滤器 Bean(核心生效逻辑)
        @Bean
        @ConditionalOnMissingBean // 容器中没有该 Bean 才注册(用户优先)
        public CharacterEncodingFilter characterEncodingFilter() {
            CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
            filter.setEncoding(this.properties.getCharset().name()); // 用 Encoding 的字符集(默认UTF-8或配置值)
            // 用 Encoding 的强制编码配置(默认强制请求编码)
            filter.setForceRequestEncoding(this.properties.shouldForce(Encoding.Type.REQUEST));
            filter.setForceResponseEncoding(this.properties.shouldForce(Encoding.Type.RESPONSE));
            return filter;
        }
    
        // 其他Bean(语言-字符集映射自定义器,省略)
    }
    • 核心作用:将 Encoding 中的配置(默认值 / 配置值),通过注册 CharacterEncodingFilter 过滤器,应用到整个 Web 应用;
    • 编码生效的完整流程:
    1. 启动时,@EableConfigurationProperties 启用 ServerProperties,绑定配置文件 server.servlet.encoding 配置;
    2. 构造器注入 ServerProperties,提取 servlet.encoding 配置(即 Encoding 实例);
    3. @Bean 注解注册 CharacterEncodingFilter,过滤器的编码、强制编码规则,全部取自 Encoding 实例;
    4. 过滤器生效,对所有请求 / 响应进行编码处理(默认 UTF-8,可通过配置文件修改)。
    三、关键疑问解答
    1. “字符编码不是在 properties 文件里设置的,是在 Encoding 里设定的”—— 为什么?
    答:Encoding 是编码配置的 “Java 载体”,默认值确实在 Encoding 里硬编码(UTF-8);而 properties/yaml 文件是 “用户自定义配置的入口”,作用是覆盖 Encoding 里的默认值。两者的关系:Encoding 存 “默认值”,配置文件存 “自定义值”,最终生效的是 “自定义值(若有)→ 默认值(若无)”。

    机器视觉学习(七)—— 卷积、边缘和滤波器 卷积运算、垂直边缘与水平边缘、滤波器 阅读详情

    相关推荐

    第十篇|网络子系统 ②——无损以太网、PFC/ECN、DCQCN 与拥塞可视化

    网络部分了解了解

    qq_37535542的博客 1874

    SpringBoot的配置类

    配置类用于向容器中注入组件,几乎每个配置类都绑定着一个或多个配置属性类,而配置属性类绑定着一个配置文件。 一、配置类注入Bean的方式 1.@Bean @Configuration public class DogConfiguration { @Bean public Dog dog() { Dog dog = new Dog(); dog.setName("小黑"); dog.setType("柯基"); return do

    weixin_46134317的博客 3769

    【寄存器模型】二、前门访问与后门访问

    1.后门访问可以更好的完成前门访问能够完成的事情:后门访问不消耗仿真时间,且消耗的运行时间也远小于前门访问的运行时间。 2.后门访问可以完成前门访问不能完成的事:对于某些特定的场景,如网络通信系统中的一些只读计数器,当要验证计数器进位归零的场景时,前门访问无法完成写寄存器操作,只能通过消耗仿真时间来使计数器到达特定的计数值。而后门访问可以直接对只读寄存器赋一个初值......

    carrotbanana的博客 9657

    SpringBoot配置类

    springboot常用注解

    qq_47660541的博客 1256

    利用ArcGIS快速生成等高线边界,完成地形图拼图

    地形图边界一般在CAD中手动绘制,然而,一幅边缘复杂的地形图边界的绘制需要花费大量时间和精力,为了减少重复性工作,提高效率,用ArcGIS软件可以自动生成实测地形图的边界

    yl14774636230的博客 9068

    Xilinx UltraScale+ FPGA实战:手把手教你实现USB3.0设备开发(附原理图+代码)

    本文详细介绍了如何使用Xilinx UltraScale+ FPGA开发USB3.0设备,涵盖硬件设计、Vivado工程配置、Petalinux系统定制及功能测试全流程。通过实战案例和优化技巧,帮助开发者快速掌握高速数据传输实现方法,提升嵌入式系统开发效率。

    weixin_29159995的博客 209

    springboot中的配置类Configuration

    使用。

    2301_80011650的博客 5017

    VisionPro 机器视觉案例 之 硬币识别

    CogPMAlignTool模板匹配工具 掩模

    机器视觉李小白的博客 1892

    Spring Boot 封装的常见的配置类

    在spring-mvc.xml中加入上述这一段。其中,allowed-origins指的是允许的访问源的域名,"*"表示任何人都可以访问,也可以指明具体的域名。4、控制层Controller接口。3、Swagger的配置类。

    qq_51120876的博客 969

    Halcon那些事:Halcon非常核心的1个概念reduce_domain算子的理解和1个详细的使用示例

    Reduce是减少的意思。并不是真的去裁剪图像,而是定义一个“感兴趣的区域(Region of Interest, ROI)”。后续的图像处理算子将只在这个定义的区域内有效,区域外的像素将被忽略。在一张白纸(完整图像)上放一张镂空的纸板(Domain)。我们后续的绘画(图像处理操作)只会透过镂空的部分影响到下面的白纸。镂空纸板之外的部分保持不变,也不会被处理。关键步骤:使用ReduceDomain,将图像的域限制为ROI区域,图像在原来图像基础上存在图像区域。

    十多年IT经验,专注机器视觉,智能制造半导体行业 577

    分布式优化 (Distributed Optimization) 算法详解及案例分析

    分布式优化是一种将优化问题分解为多个子问题并在多个计算节点上并行求解的方法。其目标是通过分布式计算资源高效地求解大规模优化问题。

    闲人编程的博客 2707

    SpringBoot-配置类(@Configuration)

    SpringBoot配置类 Spring-Boot基于java类的配置 java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有: · @Configuration:声明一个类作为配置类,代替xml文件 · @Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签 · @Value:属性注入 · @PropertySource:指定外部属性文件。 我们接下来用java配置来尝试实现连接池配置 第一步在pom.xml导入 <!--druid 数据连接池 --&gt

    weixin_45203607的博客 7279

    YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构

    本文记录的是基于的YOLOv11网络模型轻量化方法研究。GhostNet中的Ghost模块和Ghost瓶颈结构是其轻量化的关键。Ghost模块克服了传统卷积层计算资源需求大的问题,Ghost瓶颈则合理设计了通道数量的变化以及与捷径连接的方式,能更好地在减少计算成本的同时保持较高性能,从而提升模型在移动设备上的应用能力和效率。

    Limiiiing的博客 1430

    SpringBoot中,如何禁用特定的自动配置类?

    SpringBoot中,如何禁用特定的自动配置类?

    askf01的博客 1820

    jre9下载 jdk9

    (Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

    蓝牙模块HM-10手册

    蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

    SpringBoot排除不需要的自动配置类

    SpringBoot排除不需要的自动配置类,以及根据配置文件的属性,自动加载需要的自动配置类

    lzhfdxhxm的博客 1万+

    霍尼韦尔SoftMaster使用说明

    霍尼韦尔SoftMaster使用说明

    springboot自动配置类

    如果为空,执行DeferredImportSelector.selectImports获取。DeferredImportSelector是延迟的,当解析到它时,先不执行它的导入方法,而是暂存起来,等到其他定义方式(@Bean,@Component,@ComponentScan)处理完在处理,使得Springboot的bean定义后于用户的bean定义加载,从而Springboot的bean上的条件注解(比如@ConditionalOnBean)能够根据用户的定义情况起作用。

    baidu_32223873的博客 755

    大中型超市收银系统(可直接运行)

    光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

    SpringBoot 自定义自动配置类深度解析(28)

    SpringBoot 自动配置是其核心特性之一,它能够根据类路径中的依赖、配置文件和其他条件,自动为应用程序提供合理的默认配置。这大大简化了开发者的工作,减少了样板配置代码,使开发者能够更加专注于业务逻辑的实现。

    Android开发领域创作者 1603

    【SpringBoot】深入源码理解SpringBoot自动配置原理——第二讲:强大的自动配置类!

    文章目录引入spring.factories自动配置类工厂xxxAutoConfiguration自动配置类xxxProperties自动配置属性面试场景   引入 入口类的第一个切口,即注解,我们已经弄明白了。三个注解的作用分别是声明该类是配置类以被扫描到、自动配置组件、进行包的扫描。 我们已经向SpringBoot自动配置原理走近了一小步。不要着急,先来思考一下,自动配置也是需要参数的,所以SpringBoot是不是存在这样一个仓库/工厂/储藏室,放着这些配置参数呢? 我们就以此为目标,进入

    丧心病狂Loli控的博客 311

    SpringBoot-基础-10-自动配置类常用注解

    SpringBoot-基础-10-自动配置类常用注解

    m0_59588925的博客 2201

    2_springboot自动配置类

    主动配置bean容器,学会使用全局配置文件yml

    weixin_58600247的博客 1673

    【springboot】入口类注解解析+自动配置原理

    我们在写一个springboot项目时,只需要一个 入口类(启动类)就能够将整个需要注入到spring容器中的类注入,并将整个项目启动。 那么这个入口类的执行原理到底是怎么样的呢? 一、入口类注解解析 一般入口类中内容如下,如此简洁,是怎么做到将整个项目启动并向容器中注入相关内容的?其中@SpringBootApplication发挥了很大的功能。 /** * @SpringBootAppli...

    北平~ 2127

    SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

    此时所对应的**属性类(ServerProperties)**中的对象port就变成了8888,[原理就是调用了ServerProperties中的setPort方法],配置文件中没有写的属性类中的对象,则以SpringBoot。:场景是什么:以web场景举例,假设你需要进行编写web项目,在SSM中需要进行导入许多的依赖,而在这里你只需要进行导入web场景,则会直接进行导入这个场景所需要的所有依赖】在springBoot中,若是在配置文件中的属性都与配置类中的对象一一对应(这时也称此类为。

    weixin_68576312的博客 1372

    SpringBoot之自动配置类的解析和过滤机制

    假设我们的项目需要使用一个名为 MyService 的服务,我们可以定义一个自动配置类 MyServiceAutoConfiguration,它可以根据项目的配置来初始化 MyService 实例。} }在上面的代码中,我们使用了@注解来启用配置类,并且使用@注解来判断MyService是否在类路径上可用。在@Bean 方法中,我们使用了@ConditionalOnMissingBean 注解来判断当前应用程序上下文中是否已经存在 MyService 实例,如果不存在,则创建一个新的实例。

    日拱一卒无有尽,功不唐捐终入海 744

    springboot过滤不需要的自动配置类过程分析

    写在前面 入口在org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#filter

    wang0907的博客 2182

    springboot启动(五)——加载所有的自动配置类,@EnableAutoConfiguration 注解生效时机

    加载所有的自动配置类,@EnableAutoConfiguration 注解生效时机 上一篇文章我们跟踪代码看到了加载启动类目录下的bean的定义信息的过程,今天我们先分析下系统内置的自动配置类到底是啥时候加载进来的,因为tomcat等也是通过自动配置类先创建的工厂,后面才能讨论tomcat等容器的启动 接上文this.doProcessConfigurationClass(configClass, sourceClass);方法(ConfigurationClassParser类中的方法) 在使用co

    luoxiaomei999的博客 2520

    9、springboot放弃某些自动配置类

    13. 放弃某些自动配置类

    Sai_BAN的博客 397
    上一篇: SpringBoot项目中使用纯数字密码连接数据库失败
    下一篇: UEditor文档
    L.S.L_
    博客等级 码龄3年 129粉丝 150原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

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

    抵扣说明:

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

    余额充值