ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java学习笔记---SpringBoot自动配置

2022-05-19 20:31:32  阅读:207  来源: 互联网

标签:Java SpringBoot spring 配置 boot --- 自动 组件 activemq


1、父项目依赖管理

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.4.RELEASE</version>
    </parent>
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
  </parent>
  • spring-boot-dependencies 几乎声明了所有开发中常用的依赖
<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-amqp</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-blueprint</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-broker</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-camel</artifactId>
        <version>${activemq.version}</version>
      </dependency>
      <dependency>
    ......
</dependencyManagement>
  • 开发时导入spring-boot-starter-xxx(xxx即为某个开发场景)
    • 常见的如web开发 spring-boot-starter-web、redis   spring-boot-starter-data-redis......
    • 引入starter-xxx 此场景下所有常规依赖都会自动引入
    • 如 xxx-spring-boot-starter 是第三方提供的场景启动器
  • 自动版本仲裁,spring-boot-dependencies 中规定了当前依赖的版本(引入依赖时可以不写版本号)
    • <properties>
          <activemq.version>5.15.13</activemq.version>
          <antlr2.version>2.7.7</antlr2.version>
          <appengine-sdk.version>1.9.82</appengine-sdk.version>
          <artemis.version>2.12.0</artemis.version>
          <aspectj.version>1.9.6</aspectj.version>
          <assertj.version>3.16.1</assertj.version>
          <atomikos.version>4.0.6</atomikos.version>
          <awaitility.version>4.0.3</awaitility.version>
          <bitronix.version>2.1.4</bitronix.version>
          ......
      </properties>
    • 修改默认版本号(在当前项目pom.xml中重写)
    • <properties>
              <mysql.version>5.1.43</mysql.version>
          </properties>

2、自动配置

    • SpringBoot会帮我们自动配置好场景下各种所需项
      • 如在web开发场景下:
        • 自动引入配置Tomcat
        • 自动配置SpringMVC
        • 自动配好Web常用组件(如 :字符编码过滤器)
      • 拥有默认的包结构,无需配置包扫描
        • 默认进行包扫描  主程序所在包以及其所有子包下
        • 改变默认扫描路径 
          •  @SpringBootApplication( scanBasePackages = "包路径" )
          •  @ComponentScan ( "包路径" )
    • @SpringBootApplication注解
      • 等同于
        • @SpringBootConfiguration
        • @EnableAutoConfiguration
        • @ComponentScan( "包路径" )
    • SpringBoot各种场景下的自动配置功能 在 spring-boot-autoconfigure 包里面

  

 

 

    • 加载自动配置类
      • @SpringBootConfiguration
        @EnableAutoConfiguration
        @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
                @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
        public @interface SpringBootApplication{}

        三个注解

        • @SpringBootConfiguration 表示当前是一个配置类
        • @ComponentScan 指定包扫描
        • @EnableAutoConfiguration
          • @AutoConfigurationPackage
            @Import(AutoConfigurationImportSelector.class)
            public @interface EnableAutoConfiguration {}
          • @AutoConfigurationPackage :负责保存标注相关注解的类的所在包路径,向容器注入组件,名称是全类名,值是PackageImports,里面包含一个集合,集合中存储packageNames,也就是我们注解所在包。说白了,就是把我们注解所在包路径加入了容器一个专门记录packageNames的集合里
            官方注解说明:
            (Class for storing auto-configuration packages for reference later (e.g. by JPA entity scanner).)
          • @Import(AutoConfigurationImportSelector.class): 从classpath搜寻所有META-INF/spring.factories文件,借助SpringFactoriesLoader来根据autoConfigurationMetadata加载符合条件的AutoConfiguration。

            1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
            2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
            3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
            4、从META-INF / spring.factories位置来加载一个文件。
            默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
            spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

        • 最后按需开启自动配置( 按照条件装配规则(@Conditional),最终会按需配置。 )
    • 总结 and 其他
      • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
      • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
      • 生效的配置类就会给容器中装配很多组件
      • 只要容器中有这些组件,相当于这些功能就有了
      • 定制化配置
        • 用户直接自己@Bean替换底层的组件
        • 用户去看这个组件是获取的配置文件什么值就去修改。

 3、开发工具

    • Lombok : 简化JavaBean开发

    • dev-tools : 热部署,修改后 ctrl + f9 重新编译即生效     

标签:Java,SpringBoot,spring,配置,boot,---,自动,组件,activemq
来源: https://www.cnblogs.com/Lthree/p/16289989.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有