• 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
             */
            <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;

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

  • 相关阅读:
    IMX6ULL开发板Ubuntu文件系统Ubuntu-base构建
    迅为3399开发板新增目标检测技术-RKSSD-编译程序
    国际化支持、activity生命周期、屏幕翻转的ui适配
    java调用第三方接口(转载)
    android基础控件的使用
    java并发框架--Fork-Join
    java并发框架--Executor
    多线程管理
    死锁问题
    java多线程信息共享
  • 原文地址:https://www.cnblogs.com/houzheng/p/11844227.html
Copyright © 2020-2023  润新知