public interface ListableBeanFactory extends BeanFactory {
//
对于给定的名字是否含有
boolean
containsBeanDefinition
(
String
beanName
);
BeanDefinition
//
返回工厂的
BeanDefinition
总数
int
getBeanDefinitionCount
();
//
返回工厂中所有
Bean
的名字
String
[]
getBeanDefinitionNames
();
//
返回对于指定类型
Bean
(包括子类)的所有名字
String
[]
getBeanNamesForType
(
Class
<?>
type
);
/*
*
返回指定类型的名字
* includeNonSingletons
为
false
表示只取单例
Bean
,
true
则不是
* allowEagerInit
为
true
表示立刻加载,
false
表示延迟加载。
*
注意:
FactoryBeans
都是立刻加载的。
*/
String
[]
getBeanNamesForType
(
Class
<?>
type
,
boolean
includeNonSingletons
,
boolean
allowEagerInit
);
//
根据类型(包括子类)返回指定
Bean
名和
Bean
的
Map
<
T
>
Map
<
String
,
T
>
getBeansOfType
(
Class
<
T
>
type
)
throws
BeansException
;
<
T
>
Map
<
String
,
T
>
getBeansOfType
(
Class
<
T
>
type
,
boolean
includeNonSingletons
,
boolean
allowEagerInit
)
throws
BeansException
;
//
根据注解类型,查找所有有这个注解的
Bean
名和
Bean
的
Map
Map
<
String
,
Object
>
getBeansWithAnnotation
(
Class
<?
extends
Annotation
>
annotationType
)
throws
BeansException
;
//
根据指定
Bean
名和注解类型查找指定的
Bean
<
A
extends
Annotation
>
A findAnnotationOnBean
(
String
beanName
,
Class
<
A
>
annotationType
);
}
3
个跟
BeanDefifinition
有关的总体操作。包括
BeanDefifinition
的总数、名字的集合、指定类型
的名字的集合。
2
个
getBeanNamesForType
重载方法。根据指定类型(包括子类)获取其对应的所有
Bean
名字。
2
个
getBeansOfType
重载方法。根据类型(包括子类)返回指定
Bean
名和
Bean
的
Map
。
2
个跟注解查找有关的方法。根据注解类型,查找
Bean
名和
Bean
的
Map
。以及根据指定
Bean
名和注解类型查找指定的
Bean
。
总结:
正如这个工厂接口的名字所示,这个工厂接口最大的特点就是可以列出工厂可以生产的所有实例。当
然,工厂并没有直接提供返回所有实例的方法,也没这个必要。它可以返回指定类型的所有的实例。而
且你可以通过
getBeanDefifinitionNames()
得到工厂所有
bean
的名字,然后根据这些名字得到所有的
Bean
。这个工厂接口扩展了
BeanFactory
的功能,作为上文指出的
BeanFactory
二级接口,有
9
个独有
的方法,扩展了跟
BeanDefifinition
的功能,提供了
BeanDefifinition
、
BeanName
、注解有关的各种操
作。
它可以根据条件返回
Bean
的信息集合,这就是它名字的由来
——ListableBeanFactory
。