Spring Boot自动配置原理

作者: itcjj | 来源:发表于2017-06-15 17:28 被阅读115次

    Spring Boot自动配置非常灵活,就像我们买手抓饼一样,套餐里的辅料是自动配置好的,但这或许不适合你的口味,你就只能自己配置手抓饼了吗?当然不是,小吃店会让你以菜单上已有的选项为基础进行定制。下面以覆盖Spring Security配置例子入手。

    1.自动配置中使用的条件化注解表

    image.png

    2.自定义安全配置

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
           ...
    }
    

    3.开始揭开神秘面纱

    覆盖Spring Boot自动配置的安全配置时,最重要的一个类是SpringBootWebSecurityConfiguration。以下是其中的一个代码片段:

    @Configuration
    @EnableConfigurationProperties
    @ConditionalOnClass({ EnableWebSecurity.class })
    @ConditionalOnMissingBean(WebSecurityConfiguration.class)
    @ConditionalOnWebApplication
    public class SpringBootWebSecurityConfiguration {
          ...
    }
    

    翻看源码可知, SpringBootWebSecurityConfiguration上好几个注解。看到@ConditionalOnClass注解后,我们知道Classpath里必须要有@EnableWebSecurity注解。
    @ConditionalOnWebApplication 说 明 这 必 须 是 个 Web 应 用 程 序 。 @ConditionalOnMissingBean注解才是我们的安全配置类代替SpringBootWebSecurityConfiguration的关键所在。
    @ConditionalOnMissingBean注解要求当下没有WebSecurityConfiguration类型的Bean。虽然表面上我们并没有这么一个Bean,但通过在SecurityConfig上添加@EnableWeb-Security注解,我们实际上间接创建了一个WebSecurityConfiguration Bean。所以在自动配置时,这个Bean就已经存在了, @ConditionalOnMissingBean条件不成立, SpringBootWebSecurityConfiguration提供的配置就被跳过了。所以我们成功显示覆盖了自动配置!!

    相关文章

      网友评论

        本文标题:Spring Boot自动配置原理

        本文链接:https://www.haomeiwen.com/subject/mgluqxtx.html