spring 中bean 的扫描过程总结

bean 的扫描过程
  1. 首先是通过ResourcePatternResolver获取指定路径下的所有.class文件,利用AMS技术来解析所有得到的class文件对象,得到class元数据信息;
  2. 判断扫描的class文件对象,是否和某个excludefilter条件注解匹配,匹配成功以后会根据当前类生成一个ScannedGenericBeanDeFinition;
  3. 判断这个类是否是独立的、接口、抽象的,类上面是否有Lookup注解,符合上面的条件,就将这个类作为BeanDeFinition返回;
  4. 解析获取到的所有的BeanDeFinition,获取到对应的@Scope注解的数据,再将这个值放入到对应的BeanDeFinition类中;
  5. 获取到对应BeanDeFinition的名字(首先判断这个BeanDeFinition的@Component是否指定了一个名字,有则直接返回,如果@Component注解没有指定名字,那么直接生成一个认的beanName);
  6. 给BeanDeFinition设置一些认值,解析@Lazy等注解的值,存入到BeanDeFinition中;
    1. checkCandidate:判断当前的BeanDeFinition是否存在于Bean容器中,存在返回false,不存在返回true;
    2. 如果Bean容器中存在了这个BeanDeFinition,就会进入isCompatible()方法
      1. 首先判断是否兼容,是通过两个BeanDeFinition的ReSource是否相同来进行判断是否兼容,兼容返回true,不兼容返回false;
  7. 返回false则注册BeanDeFinition ,返回true,不注册 ;

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...