“Spring Boot 自动包规则原理”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第48行: | 第48行: | ||
@Import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件 | @Import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件 | ||
public @interface AutoConfigurationPackage { | public @interface AutoConfigurationPackage { | ||
+ | </syntaxhighlight>比较关键的是 <code>@Import(AutoConfigurationPackages.Registrar.class)</code> 中导入的 AutoConfigurationPackages.Registrar | ||
+ | |||
+ | ====== AutoConfigurationPackages.java ====== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | …… | ||
+ | static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports { | ||
+ | |||
+ | @Override | ||
+ | public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { | ||
+ | register(registry, new PackageImport(metadata).getPackageName()); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public Set<Object> determineImports(AnnotationMetadata metadata) { | ||
+ | return Collections.singleton(new PackageImport(metadata)); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | …… | ||
</syntaxhighlight> | </syntaxhighlight> |
2023年3月1日 (三) 02:45的版本
https://www.bilibili.com/video/BV19K4y1L7MT/?p=13
引导加载的自动配置类
@SpringBootApplication
……
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@SpringBootConfiguration
@Configuration
public @interface SpringBootConfiguration {
@Configuration
代表当前是一个配置类,使用 @SpringBootApplication 的类也会是 Spring Boot 中的一个配置类
@ComponentScan
包扫描注解,指定扫描哪些包;
@EnableAutoConfiguration
……
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
……
@AutoConfigurationPackage
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件
public @interface AutoConfigurationPackage {
比较关键的是 @Import(AutoConfigurationPackages.Registrar.class)
中导入的 AutoConfigurationPackages.Registrar
AutoConfigurationPackages.java
……
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
@Override
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
register(registry, new PackageImport(metadata).getPackageName());
}
@Override
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new PackageImport(metadata));
}
}
……