使用@AutoConfigureBefore调整配置顺序竟没生效?(中)

简介: 使用@AutoConfigureBefore调整配置顺序竟没生效?(中)

在WebMvcAutoConfiguration加载后,在它之后其实还有很多配置会尝试执行,例如:


@AutoConfigureAfter(WebMvcAutoConfiguration.class)
class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration { ... }
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class GroovyTemplateAutoConfiguration { ... }
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration { ... }
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class LifecycleMvcEndpointAutoConfiguration { ... }


这些都很容易理解:如果都不是Web环境,加载一些模版引擎的并无必要嘛。


三大注解使用的误区(重要)


根据我的切身体会,针对这三大注解,实在有太多人把它误用了,想用但是用了却又不生效,于是就容易触发一波“骂街”操作,其实这也是我书写本文的最大动力所在:纠正你的错误使用,告诉你正确姿势。


错误使用示例

我见到的非常多的小伙伴这么来使用三大注解:我这里使用“伪代码”进行模拟


@Configuration
public class B_ParentConfig {
    B_ParentConfig() {
        System.out.println("配置类ParentConfig构造器被执行...");
    }
}
@Configuration
public class A_SonConfig {
    A_SonConfig() {
        System.out.println("配置类SonConfig构造器被执行...");
    }
}
@Configuration
public class C_DemoConfig {
    public C_DemoConfig(){
        System.out.println("我是被自动扫描的配置,初始化啦....");
    }
}
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args).close();
    }
}


通过名称能知道我想要的达到的效果是:ParentConfig先加载,SonConfig后加载。(DemoConfig作为一个参考配置,作为日志参考使用即可)


启动应用,控制台打印:

配置类SonConfig构造器被执行...
配置类ParentConfig构造器被执行...
我是被自动扫描的配置,初始化啦....

Son优先于Parent被加载了,这明显不符合要求。因此,我看到很多小伙伴就这么干:


@AutoConfigureBefore(A_SonConfig.class)
@Configuration
public class B_ParentConfig {
    B_ParentConfig() {
        System.out.println("配置类ParentConfig构造器被执行...");
    }
}


通过@AutoConfigureBefore控制,表示在A_SonConfig之前执行此配置。语义层面上看,貌似没有任何问题,再次启动应用:



配置类SonConfig构造器被执行...
配置类ParentConfig构造器被执行...
我是被自动扫描的配置,初始化啦....





相关文章
|
监控 Java 索引
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
|
2月前
|
数据处理
重复值的判断标准是否可以根据具体业务需求进行调整?
重复值的判断标准需要紧密结合具体的业务需求进行灵活调整,这样才能确保数据处理的准确性和有效性,为业务决策提供可靠的数据支持。
123 58
|
8月前
|
安全 Java 5G
从源码角度剖析 Elasticserach 段合并调优策略
从源码角度剖析 Elasticserach 段合并调优策略
81 0
|
8月前
|
缓存 架构师 NoSQL
五种更新缓存的组合方式
【4月更文挑战第19天】更新缓存的步骤特别简单,共两步:更新数据库和更新缓存。但这简单的两步中需要考虑很多问题。
|
算法 前端开发 程序员
调整数组元素顺序
调整数组元素顺序
调整数组元素顺序
|
算法 Go
算法练习第十题——寻找重复数(不修改数组)
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
|
Java 程序员 应用服务中间件
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
157 0
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
|
Java Spring
使用@AutoConfigureBefore调整配置顺序竟没生效?(下)
使用@AutoConfigureBefore调整配置顺序竟没生效?(下)

热门文章

最新文章