ListableBeanFactory 是 Spring 框架中 BeanFactory 接口的一个扩展。它提供了额外的功能,允许你查询和操作在容器中定义的 bean 的列表。这个接口继承自 BeanFactory,并添加了一些新的方法,如 getBeanNamesForType(Class> type) 和 getBeansOfType(Class> type),这些方法允许你基于类型来获取 bean 的名称和实例。
ListableBeanFactory 的主要方法包括:
ListableBeanFactory 通常不直接由应用程序代码使用,而是由 Spring 的内部组件和高级框架功能使用。然而,对于需要查询和操作 bean 的高级用例,例如自定义的 bean 后处理器或框架扩展,ListableBeanFactory 可能是有用的。
在实际开发中,ApplicationContext 是更常用的接口,因为它提供了 ListableBeanFactory 的所有功能,并添加了其他许多有用的功能,如国际化支持、事件传播等。如果你正在编写普通的 Spring 应用程序代码,你通常会与 ApplicationContext 交互,而不是直接与 ListableBeanFactory 交互。
public interface ListableBeanFactory extends BeanFactory {
boolean containsBeanDefinition(String var1);
//获取BeanDefinition的总数
int getBeanDefinitionCount();
//获取Bean名字的集合
String[] getBeanDefinitionNames();
//获取指定类型Bean名字的集合
String[] getBeanNamesForType(ResolvableType var1);
//根据这个类型获取这个类型的所有bean的beanName
String[] getBeanNamesForType(@Nullable Class<?> var1);
String[] getBeanNamesForType(@Nullable Class<?> var1, boolean var2, boolean var3);
//根据类型(包括子类)返回指定Bean名和Bean的Map
<T> Map<String, T> getBeansOfType(@Nullable Class<T> var1) throws BeansException;
<T> Map<String, T> getBeansOfType(@Nullable Class<T> var1, boolean var2, boolean var3) throws BeansException;
//根据注解类型,查找Bean
String[] getBeanNamesForAnnotation(Class<? extends Annotation> var1);
//根据注解类型,查找Bean名和Bean的Map
Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> var1) throws BeansException;
@Nullable
<A extends Annotation> A findAnnotationOnBean(String var1, Class<A> var2) throws NoSuchBeanDefinitionException;
}