Spring扫描底层流程
2025-02-10 14:18:40 0 举报
分析Spring扫描源码
作者其他创作
大纲/内容
解析@Component注解所指定的beanName,没有指定则默认生成
调用AnnotationBeanNameGenerator生成beanName
如果是抽象类,但是有@Lookup注解的方法则通过
如果是抽象类或接口,则不通过
如果不是顶级类,或静态内部类,则不通过
都匹配成功后,根据当前类生成一个ScannedGenericBeanDefinition
如果当前类和某个includeFilter匹配,那就通过这个类
如果当前类和某个exdudeFilter匹配,那就排除这个类
最终扫描到某些BeanDefinition
判断当前beanName是否在spring容中已经存在,如果不存在则把beanName以及BeanDefinition注册到Spring容器中,如果存在则报错(此处有个细节,看下视频)
默认情兄下,Spring会有一个@Component注解得includeFilter
解折@Lazy、@Primary、@Dependson、@Role、@Description等注解并赋值给BeanDefnition对应的属性
扫描结束
得到包路径下的所有class文件对象,注意不是Class对象,而是文件对象(可以理解为File对象)
遍历每个BeanDefinitior
包路径
利用ASM技术解折每个class文件对象,得到class元数据信息
进一步进行条件注解@Conditional的匹配筛选
0 条评论
下一页