package org.springframework.beans.factory;
/**
该接口是对BeanFactory的扩展,允许预加载bean定义的BeanFactory可以实现此接口
其目的在于使实现它的BeanFactory能够枚举所有的Bean
该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说)
也即该接口只能枚举当前facotry的Bean
除getBeanNamesOfType,getBeansOfType方法外,其他方法也将忽略由SingletonBeanRegistry的方法
注册的Singleton Bean
除getBeanDefinitionCount和containsBeanDefinition外的方法不要频繁使用,性能很慢
*/
public interface ListableBeanFactory extends BeanFactory {
/**
根据给出的BeanName判断是否包含该Bean定义
该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说)
也即该接口只能枚举当前facotry的Bean
忽略由SingletonBeanRegistry的方法
注册的Singleton Bean
*/
boolean containsBeanDefinition(String beanName);
/**
返回Bean定义的数目
该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说)
也即该接口只能枚举当前facotry的Bean
忽略由SingletonBeanRegistry的方法
注册的Singleton Bean
*/
int getBeanDefinitionCount();
/**
返回所有Bean的BeanName组成的String数组
*/
String[] getBeanDefinitionNames();
/**
根据提供的类型返回匹配的BeanName数组
只检测顶层Bean,忽略嵌套Bean
对于FactoryBean,当提供的类型匹配FactoryBean.getObjectType时返回BeanName
当提供的类型匹配FactoryBean时返回&BeanName
该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说)
也即该接口只能枚举当前facotry的Bean
不忽略由SingletonBeanRegistry的方法时注册的Singleton Bean
不检测无法实例化的Bean(如抽象Bean)
*/
String[] getBeanNamesForType(ResolvableType type);
/**
同上
String[] getBeanNamesForType(@Nullable Class<?> type);
/**
作用同上
includeNonSingletons:判断是否匹配除Singleton外的其他scope
allowEagerInit: false只匹配FactoryBean本身,true时还匹配FactoryBean.getObjectType()
*/
String[] getBeanNamesForType(@Nullable Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);
/**
根据提供的类型返回匹配的Bean实例数组
只检测顶层Bean,忽略嵌套Bean
对于FactoryBean,当提供的类型匹配FactoryBean.getObjectType时返回BeanName
当提供的类型匹配FactoryBean时返回&BeanName
该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说)
也即该接口只能枚举当前facotry的Bean
不忽略由SingletonBeanRegistry的方法时注册的Singleton Bean
不检测无法实例化的Bean(如抽象Bean)
*/
<T> Map<String, T> getBeansOfType(@Nullable Class<T> type) throws BeansException;
/**
作用同上
includeNonSingletons:判断是否匹配除Singleton外的其他scope
allowEagerInit: false只匹配FactoryBean本身,true时还匹配FactoryBean.getObjectType()
*/
<T> Map<String, T> getBeansOfType(@Nullable Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
throws BeansException;
/**
根据提供的注解类型找到对于的BeanName数组,
不创建实例, 但FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
*/
String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);
/**
根据提供的注解类型找到对于的Bean实例数组,
FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
*/
Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;
/**
根据提供的注解类型和beanNaeme找到对应的Bean,Bean的类类型本身找不到,则遍历它的
接口和超类
如果不存在该Bean,则抛出NoSuchBeanDefinitionException
如果该Bean不支持该注解类型则返回null
*/
@Nullable
<A extends Annotation> A findAnnotationOnBean(String beanName, Class<A> annotationType)
throws NoSuchBeanDefinitionException;
}
ListableBeanFactory源码学习
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 上一篇,我们了解了 picker 的实现及基本原理。顺带着看看 datetime-picker 组件和 picke...
- 前面学习了ThreadLocal源码,这里继续学习Looper的源码,Looper也是Handler里非常重要的一...
- select 选择器是个比较复杂的组件了,通过不同的配置可以有多种用法。有必要单独学习学习。 整体结构 以下是 s...
- 首先先分析服务端: 服务端必有: public IBinder onBind(Intent intent) { r...
- 东拉西扯讲了那么多,终于到Handler了。 一句话概括,Handler就是把特定任务发送到指定线程中执行,比如说...