使用@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天前
|
数据处理
重复值的判断标准是否可以根据具体业务需求进行调整?
重复值的判断标准需要紧密结合具体的业务需求进行灵活调整,这样才能确保数据处理的准确性和有效性,为业务决策提供可靠的数据支持。
23 10
|
5月前
spark3总结——分区数对带有初始值聚合操作的影响
spark3总结——分区数对带有初始值聚合操作的影响
32 4
|
6月前
|
算法 测试技术
class062 宽度优先遍历及其扩展【算法】
class062 宽度优先遍历及其扩展【算法】
48 0
|
算法 前端开发 程序员
调整数组元素顺序
调整数组元素顺序
调整数组元素顺序
|
Java 程序员 应用服务中间件
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
使用@AutoConfigureBefore调整配置顺序竟没生效?(上)
SwiftUI—如何调整记录在List列表里的顺序
SwiftUI—如何调整记录在List列表里的顺序
265 0
SwiftUI—如何调整记录在List列表里的顺序
|
Java Spring
使用@AutoConfigureBefore调整配置顺序竟没生效?(下)
使用@AutoConfigureBefore调整配置顺序竟没生效?(下)
|
人工智能 算法
如何根据「数据范围」调整自己用什么算法 ...
如何根据「数据范围」调整自己用什么算法 ...