一 继承关系

该接口是对BeanFactory的扩展,允许预加载bean定义的BeanFactory可以实现此接口 其目的在于使实现它的BeanFactory能够枚举所有的Bean 该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说) 也即该接口只能枚举当前facotry的Bean 除getBeanNamesOfType,getBeansOfType方法外,其他方法也将忽略由SingletonBeanRegistry的方法 注册的Singleton Bean 除getBeanDefinitionCount和containsBeanDefinition外的方法不要频繁使用,性能很慢

二 定义方法

  1. /**
  2. 根据给出的BeanName判断是否包含该Bean定义,忽略由SingletonBeanRegistry的方法注册的Singleton Bean
  3. */
  4. boolean containsBeanDefinition(String beanName);
  5.  
  6. /**
  7. 返回Bean定义的数目,忽略由SingletonBeanRegistry的方法注册的Singleton Bean
  8. */
  9. int getBeanDefinitionCount();
  10.  
  11. /**
  12. 返回所有Bean的BeanName组成的String数组
  13. */
  14. String[] getBeanDefinitionNames();
  15.  
  16. /**
  17. 根据提供的类型返回匹配的BeanName数组
  18. 只检测顶层Bean,忽略嵌套Bean
  19. 对于FactoryBean,当提供的类型匹配FactoryBean.getObjectType时返回BeanName
  20. 当提供的类型匹配FactoryBean时返回&BeanName
  21. */
  22. String[] getBeanNamesForType(ResolvableType type);
  23.  
  24. String[] getBeanNamesForType(@Nullable Class<?> type);
  25. /**
  26. * includeNonSingletons:判断是否匹配除Singleton外的其他scope
  27. * allowEagerInit: false只匹配FactoryBean本身,true时还匹配FactoryBean.getObjectType()
  28. */
  29. String[] getBeanNamesForType(@Nullable Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);
  30.  
  31. /**
  32. 根据提供的类型返回匹配的Bean实例数组
  33. 只检测顶层Bean,忽略嵌套Bean
  34. 对于FactoryBean,当提供的类型匹配FactoryBean.getObjectType时返回BeanName
  35. 当提供的类型匹配FactoryBean时返回&BeanName
  36. */
  37. <T> Map<String, T> getBeansOfType(@Nullable Class<T> type) throws BeansException;
  38.  
  39. /**
  40. 作用同上
  41. includeNonSingletons:判断是否匹配除Singleton外的其他scope
  42. allowEagerInit: false只匹配FactoryBean本身,true时还匹配FactoryBean.getObjectType()
  43. */
  44. <T> Map<String, T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
  45. throws BeansException;
  46.  
  47. /**
  48. 根据提供的注解类型找到对于的BeanName数组,
  49. 不创建实例, 但FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
  50. */
  51. String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);
  52.  
  53. /**
  54. 根据提供的注解类型找到对于的Bean实例数组,
  55. FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
  56. */
  57. Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;
  58. /**
  59. 根据提供的注解类型和beanNaeme找到对应的Bean,Bean的类类型本身找不到,则遍历它的
  60. 接口和超类
  61. 如果不存在该Bean,则抛出NoSuchBeanDefinitionException
  62. 如果该Bean不支持该注解类型则返回null
  63. */
  64. @Nullable
  65. <A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType) throws NoSuchBeanDefinitionException;

由于ApplicationContext实现了这个接口,所以ApplicationContext实现的容器都可以调用这些方法,根据类型获取Bean都是开发中常用的方法

springIOC源码接口分析(五):ListableBeanFactory的更多相关文章

  1. springIOC源码接口分析(九):Environment

    先贴一下接口继承关系图,spring容器启动的时候会初始化环境,所以此接口相关接口非常有必要进行了解: 一 PropertyResolver接口 Environment继承了该接口,PropertyR ...

  2. springIOC源码接口分析(三):ApplicationContext

    一 新增方法 主要都是获取容器基本信息的一些接口,比如获取名称,id和启动时间戳,获取AutowireCapableBeanFactory等接口 二 继承接口 ApplicationContext继承 ...

  3. springIOC源码接口分析(八):AutowireCapableBeanFactory

    参考博文: https://blog.csdn.net/f641385712/article/details/88651128 一 接口规范 从宏观上看,AutowireCapableBeanFact ...

  4. springIOC源码接口分析(十一):ConfigurableApplicationContext

    一 实现接口 关系图: ConfigurableApplicationContext接口实现了三个接口,ApplicationContext, Lifecycle, Closeable, Applic ...

  5. springIOC源码接口分析(七):ApplicationEventPublisher

    一 定义方法 此接口主要是封装事件发布功能的接口,定义了两个方法: /** * 通知应用所有已注册且匹配的监听器此ApplicationEvent */ default void publishEve ...

  6. springIOC源码接口分析(六):ResourceLoader

    参考博客: https://www.cnblogs.com/jixp/articles/10702486.html 一 定义方法 Spring提供了ResourceLoader接口用于实现不同的Res ...

  7. springIOC源码接口分析(四):MessageSource

    一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...

  8. springIOC源码接口分析(二):ConfigurableBeanFactory

    一 继承功能 1 SingletonBeanRegistry接口 此接口是针对Spring中的单例Bean设计的.提供了统一访问单例Bean的功能,类中定义了以下方法: 2 HierarchicalB ...

  9. springIOC源码接口分析(一):BeanFactory

    一 应用场景 BeanFactory接口定义了IOC容器的最基本功能,提供了容器应该具有的功能规范,所有的容器都应该实现这个接口 BeanFactory设计了getBean方法用来获取容器中的Bean ...

随机推荐

  1. 换根DP(二次扫描)

    参考来自这里: https://blog.csdn.net/qq_41286356/article/details/94554729 题目在这里 https://ac.nowcoder.com/acm ...

  2. 在Linux CentOS下如何安装tar.gz和RPM软件包

    1.安装tar.gz软件包: 在Linuxr(Centos下)如何安装tar.gz软件包,该方式实质上就是源代码安装方式,具体如下: 在Linux中使用wget命令下载要安装的文件,命令格式如下:wg ...

  3. mysql主从之基于gtid的主从复制

    一 GITD介绍 1.1 gtid的含义 Global Transaction Identifier,全局事务标识 阿里云的rds目前已经使用gtid 基于gtid的主从复制原理 每个mysql数据库 ...

  4. ansible批量部署mysql

    1.1 将mysql软件包同步到客户端服务器,做安装前期准备 Ps:mysql安装包线拖到ansible服务端的/ansible/roles/mysql/files目录下 vim /ansible/r ...

  5. HBase学习笔记(四)—— 架构模型

    在逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列. 但从 HBase 的底层物理存储结构(K-V)来看,HBase 更像是一个 multi-dimensional m ...

  6. JAVA8学习——Stream底层的实现三(学习过程)

    Stream的深入(三) 心得:之前学习流,深入了流的底层.但是学的这些东西在平时日常开发的过程中,是根本不会用到的.只是为了更好帮助自己去理解流的底层设施.用起来也更自信,能够确定用的东西非常正确. ...

  7. npm install 不更改 package-lock.json 文件的解决方法

    package-lock.json 文件是版本锁定文件 package-lock.json 是在 `npm install` 时候生成的一份文件,用以记录当前状态下实际安装的各个 npm packag ...

  8. Flink系列之Time和WaterMark

    当数据进入Flink的时候,数据需要带入相应的时间,根据相应的时间进行处理. 让咱们想象一个场景,有一个队列,分别带着指定的时间,那么处理的时候,需要根据相应的时间进行处理,比如:统计最近五分钟的访问 ...

  9. 【转】常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ...

  10. 揭发233的docker/machine

    继手动滑稽之golang-vmware-driver广告篇,今天把vmware-driver完成 然而我却要发一篇牢骚,这是对docker公信力的挑战!!! 本来很简单的升级到vmware 15.x的 ...