zoukankan      html  css  js  c++  java
  • 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都是开发中常用的方法

  • 相关阅读:
    WebService之使用CXF偶遇的BUG
    修改Web项目的名称后,在TomCat中部署项目,项目的名称还是与原来相同的解决方案
    JAVA面试题一 之 io流的操作
    第四天 字符串的格式化输出
    第三天 while循环 及其用法
    第二天 注释 、运算符,文件扩展名
    第一天 python入门 基础 “”“Hello World”和if-elif的使用、数据类型
    62. (待补)统计一个字符在字符串中出现次数 与 统计一个字符串在另一字符串中出现次数。
    61. 解析linux密码配置文件,获取配置文件信息,每行归纳为一个指针数组存入内存, 练习文件,数组,指针,字符串处理相关的配合使用要点
    60. 去字符串中的空格,去左空格,去右空格,去全部空格。
  • 原文地址:https://www.cnblogs.com/houzheng/p/11844227.html
Copyright © 2011-2022 走看看