Spring - BeanDefinition的注册顺序 & DeffredImportSelector
【摘要】
文章目录
BeanDefinition的注册顺序DeffredImportSelector
BeanDefinition的注册顺序
首先是 @ComponentScan扫描: @C...

BeanDefinition的注册顺序
- 首先是 @ComponentScan扫描: @Component @Service @Controller
- @Import的 @Component @Service @Controller
- @Configuration 和 该配置类里面的Bean -----> 该配置类里面的@Import进来的实现类
- @Import进来的@Configuration 和 该配置类里面的@Bean -----> 该配置类里面的@Import进来的实现类
- @Import进来的实现了DeffredImportSelector接口的@Configuration ----> 和 该配置类里面的@Bean -----> 该配置类里面的@Import进来的实现了@ImportBeanDefinitionRegistrar接口
DeffredImportSelector 是Spring Boot 自动装配原理中不可获取的一部分, 实现了 延迟 + 分组
DeffredImportSelector
import org.springframework.context.annotation.DeferredImportSelector;
import org.springframework.core.type.AnnotationMetadata;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
/***
* 延迟 特性, 分组特性
*/
public class MyDeferredImportSelector implements DeferredImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.artisan.beans.Person"};
}
@Override
public Predicate<String> getExclusionFilter() {
return null;
}
@Override
public Class<? extends Group> getImportGroup() {
// 这个返回值决定调用DeferredImportSelector.selectImports 如果null
// 还是调用Group.selectImports
return MyGroup.class;
}
// 如果getImportGroup返回自定义Group , 会调用自定义Group的process方法
// 如果getImportGroup返回 null,会调用DefaultDeferredImportSelectorGroup的process方法,即调用selectImports
// 分组利用归类,同一组的bean只影响本组的顺序
private static class MyGroup
implements DeferredImportSelector.Group{
AnnotationMetadata metadata;
@Override
public void process(AnnotationMetadata metadata, DeferredImportSelector selector) {
this.metadata=metadata;
}
// 实现 分组
@Override
public Iterable<Entry> selectImports() {
List<Entry> list=new ArrayList<>();
list.add(new Entry(this.metadata,"com.artisan.beans.Person"));
return list;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
文章来源: artisan.blog.csdn.net,作者:小小工匠,版权归原作者所有,如需转载,请联系作者。
原文链接:artisan.blog.csdn.net/article/details/117093806
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)