• ListableBeanFactory学习


    简介

    ListableBeanFactory 是 Spring 框架中 BeanFactory 接口的一个扩展。它提供了额外的功能,允许你查询和操作在容器中定义的 bean 的列表。这个接口继承自 BeanFactory,并添加了一些新的方法,如 getBeanNamesForType(Class type) 和 getBeansOfType(Class type),这些方法允许你基于类型来获取 bean 的名称和实例。

    ListableBeanFactory 的主要方法包括:

    • getBeanNamesForType(Class type): 返回给定类型的所有 bean 名称的数组。
    • getBeansOfType(Class type): 返回给定类型的所有 bean 实例的映射。键是 bean 名称,值是 bean 实例。
    • getBeanNamesForType(Class type, boolean allowEagerInit, boolean allowSingletonPrototypes): 类似于
    • getBeanNamesForType(Class type),但提供了额外的参数来控制是否允许早期初始化和单例原型 bean。
    • getBeansOfType(Class type, boolean allowEagerInit, boolean allowSingletonPrototypes): 类似于 getBeansOfType(Class type),但提供了额外的参数来控制是否允许早期初始化和单例原型 bean。
    • containsBeanDefinition(String name): 检查容器中是否包含具有给定名称的 bean 定义。
    • isSingleton(String name): 检查具有给定名称的 bean 是否是单例。
    • isPrototype(String name): 检查具有给定名称的 bean 是否是原型。
    • isTypeMatch(String name, Class targetType): 检查具有给定名称的 bean 是否与目标类型匹配。
    • getDependencyDescriptors(String beanName): 返回给定 bean 名称的依赖描述符列表。

    ListableBeanFactory 通常不直接由应用程序代码使用,而是由 Spring 的内部组件和高级框架功能使用。然而,对于需要查询和操作 bean 的高级用例,例如自定义的 bean 后处理器或框架扩展,ListableBeanFactory 可能是有用的。

    在实际开发中,ApplicationContext 是更常用的接口,因为它提供了 ListableBeanFactory 的所有功能,并添加了其他许多有用的功能,如国际化支持、事件传播等。如果你正在编写普通的 Spring 应用程序代码,你通常会与 ApplicationContext 交互,而不是直接与 ListableBeanFactory 交互。

    源码

    public interface ListableBeanFactory extends BeanFactory {
        boolean containsBeanDefinition(String var1);
    	//获取BeanDefinition的总数
        int getBeanDefinitionCount();
    	//获取Bean名字的集合
        String[] getBeanDefinitionNames();
    	//获取指定类型Bean名字的集合
        String[] getBeanNamesForType(ResolvableType var1);
    	//根据这个类型获取这个类型的所有bean的beanName
        String[] getBeanNamesForType(@Nullable Class<?> var1);
    
        String[] getBeanNamesForType(@Nullable Class<?> var1, boolean var2, boolean var3);
    	//根据类型(包括子类)返回指定Bean名和Bean的Map
        <T> Map<String, T> getBeansOfType(@Nullable Class<T> var1) throws BeansException;
    	
        <T> Map<String, T> getBeansOfType(@Nullable Class<T> var1, boolean var2, boolean var3) throws BeansException;
    	//根据注解类型,查找Bean
        String[] getBeanNamesForAnnotation(Class<? extends Annotation> var1);
    	//根据注解类型,查找Bean名和Bean的Map
        Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> var1) throws BeansException;
    
        @Nullable
        <A extends Annotation> A findAnnotationOnBean(String var1, Class<A> var2) throws NoSuchBeanDefinitionException;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    使用4090显卡部署 Qwen-14B-Chat-Int4
    Android9 查看连接多个蓝牙耳机查看使用中的蓝牙耳机
    iOS加固保护技术:保护你的iOS应用免受恶意篡改
    340页11万字智慧政务大数据资源平台大数据底座数据治理建设方案
    用HTML+CSS仿网易云音乐网站(6个页面)
    【Linux初阶】操作系统概念与定位 | 操作系统管理硬件方法、系统调用和库函数概念
    stable diffusion模型评价框架
    Go能实现AOP吗?
    Linux系统编程·进程创建及终止
    Prism框架学习
  • 原文地址:https://blog.csdn.net/weixin_44877172/article/details/136292977