上面是这个类的一个继承关系。
1、先看看他的作用是什么?
在类路径上进行扫描,并将符合条件的bean Definition注册到ApplicationContext中;
标注@Component、@Repository、@Service、@Controller;
2、核心实现
1、从给定路径下找到’candidate‘
2、介绍几个概念吧
componentsIndex:组件索引的加载机制,和这个文件META-INF/spring.components有关,默认情况下没有配置,componentsIndex为null;
includeFilters:默认会注册@Component、javax.annotation.ManagedBean、javax.inject.Named,会判断这些注解是否标注@Indexed;
1、第一步将com.lj.netty.controller路径解析为classpath*:com/lj/netty/controller/**/*.class;
2、通过PathMatchingResourcePatternResolver得到Resource数组;
3、通过CachingMetadataReaderFactory将Resource解析为SimpleMetadataReader;
4、通过excludeFilters和includeFilters进行过滤;
5、将metadataReader包装为ScannedGenericBeanDefinition对象;
6、根据下面的条件再次进行过滤;
7、最后将剩下的加入到candidates集合中;
8、遍历上面的集合,给bean设置scope和beanName;
9、如果类型为AbstractBeanDefinition,设置默认的beanDefinition;
10、如果类型为AnnotatedBeanDefinition,解析@Lazy、@Primary、@DependsOn、@Role、@Description等注解;
11、注册到beanDefinitionMap中,注册bean名称的别名(如果有的话)。
2、注册一些注解的后处理器