写点什么

【SpringBoot】6、自动配置原理【狂神篇

  • 2022 年 5 月 14 日
  • 本文字数:1271 字

    阅读完需:约 4 分钟

  • @Configuration


表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件


  • @EnableConfigurationProperties


启动指定类的 ConfigurationProperties 功能


  • ServerProperties.class


@ConfigurationProperties(


prefix = "server",


ignoreUnknownFields = true


)


public class ServerProperties {


// ...


private final ServerProperties.Servlet servlet;


// ...


// 内部静态类


public static class Servlet {


//


private final Encoding encoding = new Encoding();


public Encoding getEncoding() {


return this.encoding;


}


}


}


  • @ConditionalOnXxx


根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效


  • @ConditionalOnWebApplication(type = Type.SERVLET)


判断当前应用是否是 web 应用,如果是,当前配置类生效


  • @ConditionalOnClass({CharacterEncodingFilter.class})


判断当前项目有没有这个类 CharacterEncodingFilter;



SpringMVC 中解决乱码的过滤器;


  • @ConditionalOnProperty( prefix = "server.servlet.encoding", value = {"enabled"}, matchIfMissing = true )


判断配置文件中是否存在某个配置:server.servlet.encoding



matchIfMissing = true



如果不存在,判断也是成立的;即使配置文件中不配置 server.servlet.encoding = true,也是默认生效的;


总结:根据当前不同的条件判断,决定这个配置类是否生效!


  • 一但这个配置类生效;就会给容器中添加各种组件;

  • 这些组件的属性是从对应的 properties类 中获取的,这些类里面的每一个属性又是和配置文件绑定的;

  • 所有在配置文件中能配置的属性都是在 XxxProperties类 中封装着;

  • 配置文件能配置什么就可以参照某个功能对应的这个属性类



[](()2、精髓


==============================================================


1、SpringBoot 启动会加载大量的自动配置类


2、看我们需要的功能有没有在 SpringBoot 默认写好的自动配置类当中;


3、再来看这个自动配置类中到底配置了哪些组件;(如果要用的组件在其中,就不需要再手动配置了)


4、给容器中自动配置类添加组件的时候,会从 properties 类中获取某些属性。只需要在配置文件中指定这些属性的值即可;


XxxAutoConfigurartion 自动配置类,给容器中添加组件


XxxProperties 封装配置文件中相关属性


[](()3、@Conditional


========================================================================


自动配置类必须在一定的条件下才能生效


@Conditional 派生注解(Spring 注解版原生的 @Conditional 作用)


作用:必须是 @Conditional 指定的条件成立,才给容器中添加组件,配置类里面的所有内容才生效;


| @Conditional 扩展注解 | 作用(判断是否满足当前指定条件) |


| --- | --- |


| @ConditionalOnJava | 系统的 java 版本是否符合要求 |


| @ConditionalOnBean | 容器中存在指定 Bean |


| @ConditionalOnMissingBean | 容器中不存在指定 Bean |


| @ConditionalOnExpression | 满足 SpEL 表达式指定 |


| @ConditionalOnClass | 系统中有指定 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 的类 |

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
【SpringBoot】6、自动配置原理【狂神篇_Java_爱好编程进阶_InfoQ写作社区