为什么会出现springboot
spring配置较为繁琐,为了简化配置,在spring4.0之后 ,springboot出现,它实现了自动化配置

初入springboot

在刚进入springboot学习的时候,如何去学习这个微框架。
1.springboot有什么优点
根据我的了解,它主要有三个优点

  • 它提供大量的默认配置,简化了项目的配置

  • 它的内嵌式容器简化了Web项目

  • 没有xml配置的要求
    2.springboot的自动装配原理
    这个从springboot的主启动类SpringbootApllication开始看起

  • 可以看到主启动类上的@SpringBootApplication注解,ctrl+鼠标点击进去可以看到以**解
    SpringBoot阶段一
    @ComponentScan它扫描了主启动类同级下的包
    现在对@[email protected]这两个核心注解进行了解
    @SpringBootConfiguration,点进去可以看到@Configuration,说明主启动类也是spring的一个配置类,从@Configuration下的@Component注解了解到它也是spring的一个组件。
    @EnableAutoConfiguration,看这个名字就知道它是实现自动配置的核心注解,进入看看
    SpringBoot阶段一
    可以看到@AutoConfigurationPackage:自动配置包。进入其进行了解
    SpringBoot阶段一
    @Import({Registrar.class})他负责导入自动注册包(被扫描到的包会到这里进行注册)
    返回上一步可以看到@Import({AutoConfigurationImportSelector.class})这个是自动导入包的核心
    自动导入选择器,现在是关键,它选择了啥东西点进去看一下
    getAutoConfigurationEntry 获取自动配置实体
    getCandidateConfigurations 获取候选的配置
    可以看到以上两个方法
    在getCandidateConfigurations方法下可以看到它标记了EnableAutoConfiguration
    SpringBoot阶段一
    认真的看一下这个getCandidateConfigurations方法,可以看到
    SpringBoot阶段一
    它加载了标记了的类,就是加上@EnableAutoConfiguration注解的类会被加载,所以他获取了主启动类下加载的所有组件。
    上面的 loadFactoryNames方法点进去了解一下
    SpringBoot阶段一
    他获取了所有的加载配置,那么在哪获取?获取哪些配置呢?看一下loadSpringFactories这个方法
    Enumeration urls = classLoader != null ? classLoader.getResources(“META-INF/spring.factories”) : ClassLoader.getSystemResources(“META-INF/spring.factories”);
    META-INF/spring.factories这个位置在 springboot-autoconfig的包下《所有配置类都在这》
    两个地址,一个从项目中获取,一个从系统中获取
    while(urls.hasMoreElements()) {
    URL url = (URL)urls.nextElement();
    UrlResource resource = new UrlResource(url);
    Properties properties = PropertiesLoaderUtils.loadProperties(resource);
    Iterator var6 = properties.entrySet().iterator();
    。。。。。。。。
    从这个代码可以看出,它从资源中遍历了所有课自动配置的包,封装成properties供我们使用。
    那为啥有的注解不生效咧
    @ConditionalOnxxx(条件,条件)条件全部满足才会生效
    小结:springboot所有的自动配置在启动主启动类时,会被加载到spring.factories中,当有对应的启动器时,它将会生效。
    spring-boot-starter-XXX
    配置文件中可配置的东西,都有其对应的xxxproperties 文件(封装配置文件的相关属性)与其绑定。
    SpringBoot阶段一
    可以通过修改配置文件去动态修改springboot中的默认配置

相关文章:

  • 2021-05-23
  • 2021-12-28
  • 2021-10-10
  • 2021-12-01
  • 2021-05-13
  • 2021-10-29
  • 2022-01-29
  • 2021-11-21
猜你喜欢
  • 2022-12-23
  • 2022-01-24
  • 2022-01-14
  • 2021-12-09
  • 2021-11-14
  • 2021-04-09
相关资源
相似解决方案