SpringBoot2 自动配置入门

SpringBoot2 自动配置入门

自动包规则原理:

@SpringBootApplication是一个融合注解,相当于:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@SpringBootConfiguration就是声明这是一个配置类,@ComponentScan声明SpringBoot去哪里扫描组件,把符合条件的带有Spring注解的类加载到容器

里,默认是启动类所在包下。

重点看:@EnableAutoConfiguration

它其实相当于:

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

@AutoConfigurationPackage又相当于:

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {}

@AutoConfigurationPackage的作用是利用registrar把主启动类所在的包注册为“自动配置默认包”,即 Spring Boot 自动配置时参考的“项目根包”。

这个包信息后面会被一些自动配置使用,比如:

JPA 扫描 @Entity 
Spring Data 扫描 Repository 
某些框架定位默认业务包

然后导入的AutoConfigurationImportSelector类会去找所有自动配置候选类,Spring Boot 启动时会读取这些类,根据条件判断是否导入。

我们可以跟进一下源码:

可以看到AutoConfigurationImportSelector类就是从META-INF/spring.factories文件加载自动配置候选类的,记录了一启动就要加载的所有配置类

然后这些类会有conditional注解,再据此筛选配置类。如果用户自己写了配置类则以用户的优先。

总结:

  • SpringBoot 先加载所有的自动配置类 xxxxxAutoConfiguration。
  • 每个自动配置类按照条件生效,默认都会绑定配置文件指定的值,从 xxxxProperties 里面拿。xxxProperties 和配置文件进行了绑定。
  • 生效的配置类就会给容器中装配很多组件。
  • 只要容器中有这些组件,相当于这些功能就有了。
  • 定制化配置:
    • 用户直接自己通过 @Bean 替换底层的组件。
    • 用户查看这个组件获取的是配置文件中的什么值,再去修改。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇