Spring扫描底层流程
2022-01-17 19:53:06 1 举报
Spring框架通过注解扫描和类路径扫描两种方式实现自动装配。注解扫描是通过读取Java类上的注解信息,根据注解信息进行相应的处理,如实例化对象、注入属性等。类路径扫描则是通过遍历类路径下的所有文件,找到符合特定规则的类,然后进行相应的处理。在扫描过程中,Spring会将找到的类注册到容器中,以便后续使用。此外,Spring还支持自定义标签和过滤器,以满足不同的需求。总之,Spring框架通过灵活多样的扫描方式实现了自动化配置和管理,大大提高了开发效率。
作者其他创作
大纲/内容
给BeanDefinition对象中的属性赋默认值
如果当前类和某个excludeFilter匹配,那就排除这个类
遍历每个BeanDefinition
最终扫描到某些BeanDefinition
利用ASM技术解析每个class文件对象,得到class元数据信息
如果是抽象类,但是有@Lookup注解的方法则通过
如果不是顶级类,或静态内部类,则不通过
都匹配成功后,根据当前类生成一个ScannedGenericBeanDefinition
扫描结束
进一步进行条件注解@Conditional的匹配筛选
解析@Lazy、@Primary、@DependsOn、@Role、@Description等注解并赋值给BeanDefinition对应的属性
判断当前beanName是否在Spring容器中已经存在,如果不存在则把beanName以及BeanDefinition注册到Spring容器中,如果存在则报错(此处有个细节,看下视频)
默认情况下,Spring会有一个@Component注解得includeFilter
如果当前类和某个includeFilter匹配,那就通过这个类
得到包路径下的所有class文件对象,注意不是Class对象,而是文件对象(可以理解为File对象)
调用AnnotationBeanNameGenerator生成beanName
如果是抽象类或接口,则不通过
解析@Component注解所指定的beanName,没有指定则默认生成
包路径
0 条评论
下一页