ListableBeanFactory实现了BeanFactory接口, Listable意思是能列在单子上的,ListableBeanFactory可以枚举它们的所有bean信息,而不用一个个通过bean的名称或类型一个个查找。如果容器是有层级的,比如实现了HierarchicalBeanFactory接口,返回值不考虑层级的信息,只读取当前容器定义的信息。
1、BeanDefinition相关
主要有判断是否有包含某个bean,当前bean的总数以及bean的名称数组。如果注册到容器中,但不是BeanDefinition的,不会统计在内。
2、getBeanNamesOfType
根据条件,返回bean名称的数组。
3、getBeansOfType
根据条件,返回bean名称和bean的数组。
FactoryBean在创建对象的时候会对对象进行初始化,如果当前FactoryBean中不包含当前所要创建的bean,会查找父类FactoryBean来查找,因此如果有层级的话,也是读取到顶级容器的,如果要读取当前容器的,需要使用BeanFactoryUtils的beanNamesForTypeIncludingAncestors的方法。
这两个方法,都有includeNonSingletons和allowEagerInit的参数。includeNonSingletons表示是否包含单例,allowEagerInit表示是否包含延迟初始化单例对象和对象。
4、Annotation相关
主要有通过注解返回bean数组、通过注解返回bean名称和bean的数组、查找bean的注解。