springIOC源码接口分析(五):ListableBeanFactory

一 继承关系

该接口是对BeanFactory的扩展,允许预加载bean定义的BeanFactory可以实现此接口 其目的在于使实现它的BeanFactory能够枚举所有的Bean 该接口不支持分层结构(对于继承了HierarchicalBeanFactory的BeanFactory来说) 也即该接口只能枚举当前facotry的Bean 除getBeanNamesOfType,getBeansOfType方法外,其他方法也将忽略由SingletonBeanRegistry的方法 注册的Singleton Bean 除getBeanDefinitionCount和containsBeanDefinition外的方法不要频繁使用,性能很慢

二 定义方法

        /**
         根据给出的BeanName判断是否包含该Bean定义,忽略由SingletonBeanRegistry的方法注册的Singleton Bean
         */
        boolean containsBeanDefinition(String beanName);

        /**
         返回Bean定义的数目,忽略由SingletonBeanRegistry的方法注册的Singleton Bean
         */
        int getBeanDefinitionCount();

        /**
         返回所有Bean的BeanName组成的String数组
         */
        String[] getBeanDefinitionNames();

        /**
         根据提供的类型返回匹配的BeanName数组
         只检测顶层Bean,忽略嵌套Bean
         对于FactoryBean,当提供的类型匹配FactoryBean.getObjectType时返回BeanName
         当提供的类型匹配FactoryBean时返回&BeanName
         */
        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
         */
         Map getBeansOfType(@Nullable Class type) throws BeansException;

        /**
         作用同上
         includeNonSingletons:判断是否匹配除Singleton外的其他scope
         allowEagerInit: false只匹配FactoryBean本身,true时还匹配FactoryBean.getObjectType()
         */
         Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit)
                throws BeansException;

        /**
         根据提供的注解类型找到对于的BeanName数组,
         不创建实例, 但FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
         */
        String[] getBeanNamesForAnnotation(Classextends Annotation> annotationType);

        /**
         根据提供的注解类型找到对于的Bean实例数组,
         FactoryBean类型将被初始化,因为该方法考虑FactoryBean创建的对象
         */
        Map getBeansWithAnnotation(Classextends Annotation> annotationType) throws BeansException;
        /**
         根据提供的注解类型和beanNaeme找到对应的Bean,Bean的类类型本身找不到,则遍历它的
         接口和超类
         如果不存在该Bean,则抛出NoSuchBeanDefinitionException
         如果该Bean不支持该注解类型则返回null
         */
        @Nullable
        extends Annotation> A findAnnotationOnBean(String beanName, Class annotationType) throws NoSuchBeanDefinitionException;

由于ApplicationContext实现了这个接口,所以ApplicationContext实现的容器都可以调用这些方法,根据类型获取Bean都是开发中常用的方法

你可能感兴趣的:(springIOC源码接口分析(五):ListableBeanFactory)