Spring 之 @EnableAutoConfiguration 注解

目录

注解内部代码

关于@AutoConfigurationPackage

关于@Import(AutoConfigurationImportSelector.class)

关于@EnableAutoConfiguration


注解内部代码

该注解中包含比较重要的两块:@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)

 

关于@AutoConfigurationPackage

首先@EnableAutoConfiguration中包含@AutoConfigurationPackage注解,其作用就是将其所在类的包及其子包扫入spring容器中

比如我们按照传统的方法要写一个控制器在包 com.test.learn.controller下,如果用传统的写法,需要把com.test.learn.controller手写到scan扫描器里从而加入spring容器。

对比spring boot自动配置:

package com.test.learn;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LearnApplication {

    public static void main(String[] args) {
        SpringApplication.run(LearnApplication.class, args);
    }

}

@AutoConfigurationPackage:使spring boot自动配置 => 例如@SpringBootApplication包含@AutoConfigurationPackage,它可以找到@SpringBootApplication所在类的包,按照上面代码的例子该包就是com.test.learn,所以它会将该包com.test.learn和所有子包com.test.learn.xxx扫入spring容器中。

所以比较明了了,@AutoConfigurationPackage就是将其所在类的包及其子包扫入spring容器中

 

关于@Import(AutoConfigurationImportSelector.class)

然后下来的关键就是@Import(AutoConfigurationImportSelector.class),上面的@AutoConfigurationPackage是把所在类的包和子包扫入spring容器中,其实也就是把自己写的代码扫到spring容器中。而@Import(AutoConfigurationImportSelector.class)其实就是将第三方的jar包(也有可能是配置文件)引入容器中。

其作用是让Spring Boot自动配置尝试根据您添加的jar依赖项自动配置Spring应用程序。

进入到AutoConfigurationImportSelector的源码中:

当容器启动,它会调用到getAutoConfigurationEntry方法中:

因为通过getCandidateConfigurations方法引入,所以我们进到该方法中去查看:

我们继续进到loadSpringFactories中一探究竟:

然后我们找到了最终想找的东西:spring boot在启动时会根据"META-INF/spring.factories"配置文件找到三方的一些依赖并且引入本项目

然后接下来寻找配置文件"META-INF/spring.factories"的位置:

spring启动的时候会把这些第三方包引入到项目里面来

 

关于@EnableAutoConfiguration

传统写法会将  自己写的代码、第三方的包  自己进行配置

而spring 提供了@EnableAutoConfiguration会将上面这两部分自动配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_我走路带风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值