一.扫描返回包路径下的候选的BeanDefinition(有@Componet注解的类)
1.1 从包路径下获取所有的.class文件
1.2遍历每个Resource对象
1.3利用MetadataReaderFactory解析resource得到MetadataReader对象
1.4利用MetadataReader进行excludeFilter和includeFilter过滤,以及@Conditional条件注解的筛选符合条件的类信息,生成ScannerGenericBeanDefinition
1.5再根据MetadataReader判断这个类是否是抽象类或者接口,如果不是就加入候选的结果集中。
二.遍历候选的BeanDefinition
2.1.获取ScopeMetadata从而获取到BeanDefinition的Scope数据。
2.2获取MetadataReader从而获取到类的信息,包括类名、父类的名字、所实现的接口名字、内部类的名字、判断是否是抽象类、判断是否是接口、判断是是不是一个注解、所有注解信息等。
2.3检查spring容器中是否存在当前beanName,如果不存在则把BeanDefinition注册进入spring容器。
网友评论