SpringBoot启动流程,自动装配原理

SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。


web项目中引用了utils-jar包,但是现在直接从IOC容器中却没有获取到,这是因为@SpringBootApplication注解他是默认的去当前包及其子包。
解决方法有两种:
1,手动添加@ComponentScan({"come.example","com.itheima"})

2,使用@Import注解
该注解代入的类会被Spring加载到IOC容器中导入的形式主要有一下几种
2.1 直接代入普通类
2.2 导入配置类
2.3 导入ImportSelector接口实现类

@Import注解的升级版本采用@EnableXxx注解  这个注解是第三方提供的,因为你需要导入那些类  第三放是最清楚的,所有第三方提供了@EnableXxx

他这个注解里面就有@import注解里面导入的就是ImportSelect的接口实现类

直接引入这个enableXxx  来获取需要注入进容器的Bean
2.3的方式是最优雅,简洁的




@SpringBootApplication作为springBoot启动类上的核心注解,可以说是springBoot最重要的一个注解从这个注解开始分析springBoot的原理

点开@springBootApplication会看到下面这个

元注解:是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其他的注解上面。

除了元注解  还有三个最重要的注解

- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan

@SpringBootConfiguration注解上存在一个@Configuration注解

@Indexed注解,是用来加速应用启动的(了解即可)。

@Configuration注解上面有@Component注解

> @SpringBootConfiguration注解上使用了@Configuration,表明SpringBoot启动类就是一个配置类。

> @ComponentScan注解是用来进行组件扫描的,扫描启动类所在的包及其子包下所有被@Component及其衍生注解声明的类。
> SpringBoot启动类,之所以具备扫描包功能,就是因为包含了@ComponentScan注解。这里扫描的包路径默认当前包及其子包。

@SpringBootApplication里面包含的三个注解  
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

其中最核心的注解就是

@EnableAutoConfiguration

该注解封装的自动装配的原理,点进该注解里面可以看到下面的内容

@Import注解将ImportSelector接口的实现类AutoConfigurationImportSelector注入了IOC容器

这行message  提供了两份文件

第一:META-INF/spring-factories文件

第二:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

这里的全路径类,都可以自动注入到IOC容器中。

但是这个文件这么多类并不是全部都需要注入到IOC容器中

@Conditional注解  按照一定的条件进行判断  只有满足给定条件才会注册相应的bean到IOC容器中

他本身是一个父注解。

1.@ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。 

2.@ConditionalOnMissingBean:判断环境中没有对应的bean(类型 或 名称) ,才注册bean到IOC容器。 

3.@ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到IOC容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值