您的位置:首页 > 编程语言 > Java开发

Spring框架之IoC容器—ListableBeanFactory接口

2017-10-27 10:34 525 查看

一、ListableBeanFactory简介

ListableBeanFactory
继承于BeanFactory接口


ListableBeanFactory是在BeanFactory接口的基础上,
扩展了Bean迭代的功能(一次性获取Bean实例)


ListableBeanFactory接口中的方法只会考虑
自身Factory
所定义的bean,忽略ConfigurableBeanFactory的registerSingleton注册的单例bean。
但需要注意的是:ListableBeanFactory的getBeanNamesOfType和getBeansOfType是例外,这两个方法会考虑手动注册的单例
。不过,由于BeanFactory接口的getBean可以透明访问这些特殊bean。在一般情况下,所有的bean都是由external bean定义,所以应用不需要顾虑这些差别。

二、ListableBeanFactory源码详解

public interface ListableBeanFactory extends BeanFactory {
/**
* 判断ListableBeanFactory容器中是否包含指定的Bean名称对应的Bean定义。
* 注意:该ListableBeanFactory容器不考虑参与的层级结构及忽略通过其他方式注册的单例Bean。
*/
boolean containsBeanDefinition(String beanName);

/**
* 获取Bean定义的个数。
* 注意:该ListableBeanFactory容器不考虑参与的层级结构及忽略通过其他方式注册的单例Bean。
*/
int getBeanDefinitionCount();

/**
* 获取在该ListableBeanFactory容器中定义的Bean的名称列表。
* 注意:该ListableBeanFactory容器不考虑参与的层级结构及忽略通过其他方式注册的单例Bean。
*/
String[] getBeanDefinitionNames();

/**
* 根据指定的Bean类型获取对应的Bean名称列表。
* 注意:1)该ListableBeanFactory容器不考虑参与的层级结构,
* 可以通过BeanFactoryUtils的beanNamesForTypeIncludingAncestors方法获取祖先工厂中的Bean。
* 2)不忽略通过其他方式注册的单例Bean。
*/
String[] getBeanNamesForType(ResolvableType type);

/**
* 根据指定的Bean类型获取对应的Bean名称列表。
* 注意:1)该ListableBeanFactory容器不考虑参与的层级结构,
* 可以通过BeanFactoryUtils的beanNamesForTypeIncludingAncestors方法获取祖先工厂中的Bean。
* 2)不忽略通过其他方式注册的单例Bean。
*/
String[] getBeanNamesForType(Class<?> type);

/**
* 返回匹配给定类型(包括子类)的所有bean的名字。
* 如果是普通bean,则是bean定义的名字;
* 如果是FactoryBean,则是其getObjectType方法返回的对象的名字。
* 注意:1)只考虑最顶层的bean,内部嵌套的bean即便可能匹配指定的类型也不考虑;
* 2)该ListableBeanFactory容器不考虑参与的层级结构,可以通过BeanFactoryUtils的beanNamesForTypeIncludingAncestors方法获取祖先工厂中的Bean;
* 3)不忽略通过其他方式注册的单例Bean。
* 4)考虑对象为FactoryBean创建的情况,如果allowEagerInit设置,FactoryBean对象会初始化,如果被FactoryBean创建的对象与指定类型不匹配,那么将与此FactoryBean本身匹配;
* 如果allowEagerInit没有设置,仅仅FactoryBean本身被检查。
*/
String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);

/**
*
*/
<T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;

/**
*
*/
<T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
throws BeansException;

/**
*
*/
String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);

/**
*
* @since 3.0
*/
Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;

/**
*
*/
<A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType)
throws NoSuchBeanDefinitionException;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: