系列文章目录
springboot 自动装配原理
前言
1、SpringBootApplication 是一个复合注解;源码以及原理
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration //里面封装了@Configuration
@EnableAutoConfiguration //自动装配和包扫描
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //向容器导入逐组件类 主要做一件事注入 BasePackages组件
@Import(AutoConfigurationImportSelector.class) //自动装配扫描 META-INF/spring.factories 的文件
public @interface EnableAutoConfiguration {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
//向容器导入逐组件类 主要做一件事注入 BasePackages组件
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {
一、热插拔
/**
* @Classname ConfigMark
* @Description 标记类
* @Author 沐沐
* @Date 2021/9/3 18:23
* @Version 1.0.0
*/
public class ConfigValidatorMark {
}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import(ValidatorConfiguration.class)
public @interface EnableRegisterValidator {
}
@Configuration
@ConditionalOnBean(ConfigValidatorMark.class)
public class ValidatorAutoConfiguration {
//使用
@EnableRegisterValidator
@MapperScan({"com.yang.authentication.**.mapper"})
@SpringBootApplication
public class AuthenticationApplication {
二、导入组件方式
//例子 1、:
@Import({MyImportBeanDefinitionRegistrar.class, MyImportSelect.class,Man.class})
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AbstractBeanDefinition abstractBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Dog.class).getBeanDefinition();
registry.registerBeanDefinition("dog", abstractBeanDefinition);
}
}
public class MyAutoConfigurationImportSelector extends AutoConfigurationImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return super.selectImports(annotationMetadata);
}
}
三、自动装配原理截图