Spring扫描底层流程
2024-05-22 00:09:45 0 举报
Spring扫描底层流程是一种在Spring应用程序中自动检测和注册bean的配置过程。它涉及到对类路径中的类进行扫描,以识别出那些标记为Spring管理的组件,如@Component、@Service、@Repository和@Controller等。这些注解被称为元注解,用于描述bean的类型和功能。 当应用程序启动时,Spring的扫描机制会遍历应用程序的类路径,寻找带有元注解的类。对于每个找到的类,Spring会创建一个BeanDefinition对象,该对象包含了类的配置信息,如类的名字、属性和方法等。 扫描结束后,Spring会按照BeanDefinition对象中的配置信息来创建实际的bean实例,并将其注册到Spring容器中。这样,当其他组件需要时,就可以通过依赖注入的方式来获取这些bean实例。 Spring扫描流程是一种简化配置和管理bean的机制,可以减少硬编码和降低错误率。通过使用Spring扫描,开发者可以将精力集中在业务逻辑的实现上,而非bean的配置和管理上。
作者其他创作
大纲/内容
解下@Lazy、@Primary、@DependsOn、@Role、@Description等注解并赋值给BeanDefinition对应的属性
判断当前beanName是否在Spring容器中已经存在,如果不存在则把beanName以及BeanDefinition注册到Spring容器中,如果存在则报错
如果不是顶级类,或静态内部类,则不通过
如果当前类和某个includeFilter匹配,那就通过这个类
得到包路径下所有class文件对象,注意不是Class对象,而是文件对象(可以理解为File对象)
默认情况下,Spring会有一个@Component注解得includFilter
如果是抽象类或接口,则不通过
给BeanDefinition对象中属性赋值默认值
扫描结束
包路径
调用AnnotationBeanNameGenerator生成beanName
都匹配成功后,根据当前类生成一个ScannedGenericBeanDefinition
遍历每个BeanDefinition
如果是抽象类,但是有@Lookup注解的方法则通过
如果当前类和某个excludeFilter匹配,那就排除这个类
进一步进行条件注解@Conditional的匹配筛选
最终扫描到某些BeanDefinition
利用ASM技术解析每个class文件对象,得到class元数据信息
0 条评论
下一页