SpringBoot2基础学习(二)自动配置(二)

SpringBoot自动配置原理入门

1.@SpringBootApplication

程序主入口

2.
@SpringBootConfiguration
@EnableAutoConfiguration//自动配置核心
@ComponentScan

@SpringBootConfiguration是一个核心配置类,类似于@configuration

@ComponentScan包扫描,指定扫描哪些

@EnableAutoConfiguration

@AutoConfigurationPackage//自动配置包
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

1.@AutoConfigurationPackage

@Import({Registrar.class})	//给容器中导入一个组件
public @interface AutoConfigurationPackage {

Registrar:利用Registrar给容器中导入一系列组件,将指定的一个包下的所有组件导入进来(@SpringBootApplication所修饰的类所在的包下)

2.@Import({AutoConfigurationImportSelector.class})

public String[] selectImports(AnnotationMetadata annotationMetadata) {
    if (!this.isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    } else {
        AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata);
        return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
    }
}

this.getAutoConfigurationEntry(annotationMetadata);

1.利用this.getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2.List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);获取到所有需要导入容器中的配置类
3.利用工厂加载Map<String,List<String>> loadSpringFactories(@Nullable ClassLoader classLoader); 得到所有的组件
4.从META-INF/spring.factories位置来加载一个文件
    默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件(有的包下面有spring.factories,但是有的包下没有)
    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
    文件里面完全写死了spring-boot已启动就要给容器中加载的所有配置
按需开启自动配置项
在spring-boot-autoconfigure-2.3.4.RELEASE.jar包里META-INF/spring.factories有127个场景配置
虽然我们127个场景的所有自动配置启动的时候默认全部加载
按照条件装配规则(@Conditional),最终会按需配置

给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。

SpringBoot默认会在底层配好所有的组件,但是如果用户自己配置了以用户的优先

@Bean
@ConditionalOnMissingBean //该注解表示如果有用户配置的就用用户的,没有则用底层的
public CharacterEncodingFilter characterEncodingFilter(){}

总结:

1.SpringBoot先加载所有的自动配置类 XXXAutoConfiguration

2.每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。XXXProperties里面拿。XXXProperties和配置文件进行了绑定。

3.生效的配置类就会给容器中装配很多组件

4.只要容器中有这些组件,相当于这些功能就有了

5.只要用户有自己配置的,就以用户的优先

6.定制化配置

​ 用户直接自己@Bean替换底层的组件

​ 用户去看这个组件时获取的配置文件是什么值就去修改

最佳实践
  • 引入场景依赖
  • 查看自动配置了那些(选做)
    • 自己分析,引入场景对应的自动配置一般都生效(查看是否配置,自动配置报告,在配置文件中debug=true)
  • 是否需要修改
    1. 参照文档修改配置项
    2. 自己分析,xxxProperties绑定了配置文件的哪些。
    3. 自定义加入或者替换组件@Component,@Bean
    4. 自定义器 xxxCustomizer
开发小技巧

1.Lombok

  • 引入Lombok依赖

  • <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    
    并搜索安装lombok插件
    @Data   //get set方法
    @ToString   //toString()方法
    @AllArgsConstructor //全参数的构造方法
    @NoArgsConstructor  //无参数的构造方法
    @EqualsAndHashCode  //重写HashCode方法
    @Slf4j Lombok自带的日志输出可以使用log.info输入语句
    

2.dv-tools(热部署,这属于把项目重新运行一遍)

3.Spring Initailizr(项目初始化向导)

使用idea自带的Initailizr来进行一个SpringBoot项目的快速搭建

resources下的 static装的是静态资源 templates装的是页面 application.properties是配置文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值