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; }
相关文章推荐
- Spring框架核心技术--IOC容器
- 浅析Java的Spring框架中IOC容器容器的应用
- 【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)
- Spring框架之IoC容器—HierarchicalBeanFactory接口
- Spring框架IOC容器和AOP解析
- Spring框架之IoC容器—概览
- spring框架 使用注解方式将bean加入ioc容器的问题:BeanDefinitionStoreException
- [置顶] Spring框架介绍和IoC容器中Bean配置(Spring框架)
- Spring框架之SpringIoc容器(一)
- Spring框架之IoC容器—ConfigurableBeanFactory接口
- 深入理解Java的Spring框架中的IOC容器
- Spring框架的IOC容器
- Spring框架及IOC容器
- Spring框架IOC容器和AOP解析
- Spring框架IOC容器和AOP解析
- 【Spring学习笔记】Spring框架的IoC容器学习笔记
- Spring框架之IoC容器—AutowireCapableBeanFactory接口
- Spring框架IOC容器和AOP解析
- Spring框架-IOC容器和Bean的配置(1)
- Spring框架IOC容器和AOP解析