6 原理
约 823 字大约 3 分钟
2025-06-22
SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了lOc容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。
组件扫描
当spring启动时会进行扫描扫描启动类所在包及子包,当有被@Componect及其衍生注解修饰的类时就会注册为bean对象加入到ioc容器中由spring管理 如果有包不在被扫描的范围内,可以使用@Componentscan指定要扫描的包,被扫描的包及其子包也会被扫描
@Import
@lmport导入。使用@lmport导入的类会被Spring加载到loc容器中,导入形式主要有以下几种:
- 普通类 : 使用@Import导入的类不需要加任何注解也会被注册为bean对象
- 配置类 : 配置类导入后这个配置类中的所有bean对象都会加载到ioc容器中
- ImportSelector接口实现类 : 这个类中有一个selectImports函数需要重写,它的返回值是一个字符串数组,其中存储着要加载到ioc容器中bean对象的全类名,即这个函数返回的全类名都会被注册为bean对象加载到ioc容器中
public class MyImportSelector implements ImportSelector{
public String[] selectImports(AnnotationMetadata importingClassMetadata){
return new String[]{"com.example.HeaderConfig"};
}
}
第三方包中支持spring的话往往会提供一个@Enable开头的注解,这个注解封装了@Import注解,可以根据此判断都会导入哪些类能加载到ioc容器中
在org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中存储着被ioc容器管理类的全类名,他们大多数是不会默认加载到ioc中的,只有在特定条件下才会加载到ioc容器中被使用 其中@Conditional开头的注解就是在达成特定条件才会被加载
@Conditional
作用:按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到SpringIOc容器中。 位置:方法、类 声明在类上表示对整个类都有效 声明在方法上(要与@Bean配合使用)表示只对当前方法声明的bean有效
@Conditional本身是一个父注解,派生出大量的子注解:
- @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到ioc容器。
- @ConditionalOnMissingBean:判断环境中没有对应的bean(类型或名称),才注册bean到loc容器。如果要根据指定的类型判断需要使用value属性指定,如果要根据指定的名称判读需要使用name属性指定
- @ConditionalOnProperty:判断配置文件中有对应属性和值,才注册bean到loc容器。name属性用于指定属性名,havingValue属性用于指定属性名对应的值
起步依赖
在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot 的 starter。
一般来说springboot整合的起步依赖都是 : spring-boot-starter-名称 第三方主动适配spring的起步以来都是 : 名称-spring-boot-starter
贡献者
版权所有
版权归属:PinkDopeyBug