SpringBoot的依赖管理以及自动配置原理

SpringBoot的依赖管理以及自动配置原理

本篇对springBoot的依赖管理以及自动配置等两个特性进行介绍,尤其对自动配置的原理进行了详细的解释和源码分析,通过redis的案例对配置加载过程进行说明。

依赖管理
  • 父项目做依赖管理(自动版本仲裁)。即spring-boot-starter-parent提供相关的 Maven 默认依赖,使用它之后,常用包的依赖就可以省去 version 标签。

    <parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.4.3</version>
    		<relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    //列举定义的版本号
    <activemq.version>5.16.1</activemq.version>
    <antlr2.version>2.7.7</antlr2.version>
    <appengine-sdk.version>1.9.86</appengine-sdk.version>
    <artemis.version>2.15.0</artemis.version>
    <aspectj.version>1.9.6</aspectj.version>
    <assertj.version>3.18.1</assertj.version>
    <atomikos.version>4.0.6</atomikos.version>
    <awaitility.version>4.0.3</awaitility.version>
    <bitronix.version>2.1.4</bitronix.version>
    <build-helper-maven-plugin.version>3.2.0</build-helper-maven-plugin.version>
    <byte-buddy.version>1.10.20</byte-buddy.version>
    <caffeine.version>2.8.8</caffeine.version>
    
  • 修改默认的版本号。根据就近原则,在pom中修改之后,先按照pom中的版本号,否则遵循父类中的版本。

    <properties>
            <mysql.version>5.1.43</mysql.version>
    </properties>
    
自动配置
  • 启动类上都标有**@SpringBootApplication**这个注解,此注解包含以下三种注解:

    @SpringBootConfiguration //等同于@Configuration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
          @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
    默认扫描与启动类同包下的类,若想改变扫描路径,@SpringBootApplication(scanBasePackages="com.example")或者@ComponentScan 指定扫描路径。
    
  • 然后看看@EnableAutoConfiguration干了什么

    @AutoConfigurationPackage//当SpringBoot应用启动时默认会将启动类所在的package作为自动配置的package。
    @Import(AutoConfigurationImportSelector.class)
    public @interface EnableAutoConfiguration {
        
    }
    /*
    即此注解导入了一个AutoConfigurationImportSelector.class类。该类会加载META-INF/spring.factories下EnableAutoConfiguration类型的所有values。
    SpringFactoriesLoader读取META-INF/spring.factories文件,加载相应类型的类
    */
    protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
    		if (!isEnabled(annotationMetadata)) {
    			return EMPTY_ENTRY;
    		}
    		AnnotationAttributes attributes = getAttributes(annotationMetadata);
    		List<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值