DefaultListableBeanFactory学习

简介

DefaultListableBeanFactory 是 Spring 框架中的一个核心类,它实现了 BeanFactory、HierarchicalBeanFactory 和 ListableBeanFactory 接口,同时也间接实现了 BeanDefinitionRegistry 和 AliasRegistry 接口。DefaultListableBeanFactory 提供了完整的 bean 工厂功能,包括注册、定义、配置和管理 bean,还支持 bean 的别名设置。

以下是 DefaultListableBeanFactory 的一些关键功能:

  • Bean 注册与定义:DefaultListableBeanFactory 允许你注册和定义 bean。你可以使用 XML 配置、注解或编程方式将 bean 定义添加到工厂中。
  • Bean 配置:工厂允许你配置 bean 的属性、依赖、作用域等。这通常通过解析 bean 定义时提供的元数据来完成。
  • Bean 实例化:当请求一个 bean 时,DefaultListableBeanFactory 会负责实例化 bean,包括调用适当的构造函数或工厂方法,并处理任何必要的依赖注入。
  • 依赖解析:工厂能够解析 bean 之间的依赖关系,并确保在创建 bean 时按正确的顺序注入依赖。
  • Bean 生命周期管理:DefaultListableBeanFactory 支持 bean 的生命周期回调,如 InitializingBean 和 DisposableBean 接口,以及自定义的 init 和 destroy 方法。
  • Bean 别名:工厂允许你为 bean 定义别名,这样你可以使用不同的名称来引用同一个 bean。
  • 列表功能:由于实现了 ListableBeanFactory 接口,DefaultListableBeanFactory 提供了获取 bean 定义信息、获取 bean 名称列表等功能。
  • 层次结构:作为 HierarchicalBeanFactory 的实现,DefaultListableBeanFactory 支持父子工厂的概念,允许你在不同的工厂层次结构中共享和覆盖 bean 定义。

DefaultListableBeanFactory 通常不会直接用于应用程序代码,而是作为更高级别工厂类(如 XmlBeanFactory 或 AnnotationConfigApplicationContext)的基础。这些高级工厂类提供了更简洁的配置方式,如 XML 配置或 Java 配置。

这里就不作源码解释了,因为大部分核心源码都在其继承的几个父类中,请看之前的文章有介绍

示例

java 复制代码
import org.springframework.beans.factory.support.DefaultListableBeanFactory;  
import org.springframework.beans.factory.support.RootBeanDefinition;  
  
public class DefaultListableBeanFactoryExample {  
    public static void main(String[] args) {  
        // 创建 DefaultListableBeanFactory 实例  
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();  
  
        // 创建并注册一个 RootBeanDefinition  
        RootBeanDefinition beanDefinition = new RootBeanDefinition(SimpleBean.class);  
        beanFactory.registerBeanDefinition("simpleBean", beanDefinition);  
  
        // 获取并使用 bean  
        SimpleBean simpleBean = (SimpleBean) beanFactory.getBean("simpleBean");  
        simpleBean.doSomething();  
    }  
}  
  
class SimpleBean {  
    public void doSomething() {  
        System.out.println("Doing something in SimpleBean");  
    }  
}

在这个示例中,我们创建了一个 DefaultListableBeanFactory 实例,并手动注册了一个 SimpleBean 类型的 bean 定义。然后,我们从工厂中获取了这个 bean 的实例,并调用了它的方法。

虽然手动使用 DefaultListableBeanFactory 是可能的,但在实际应用中,你通常会使用 Spring 提供的更高级别的上下文类(如 ApplicationContext),因为它们提供了更多的功能和便利性。

相关推荐
LUCIAZZZ8 分钟前
简单说一下什么是RPC
java·网络·网络协议·计算机网络·spring cloud·rpc
嘵奇11 分钟前
最新版IDEA下载安装教程
java·intellij-idea
s_fox_37 分钟前
Nginx Embedded Variables 嵌入式变量解析(4)
java·网络·nginx
Jelena1577958579243 分钟前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
数据小小爬虫1 小时前
Jsoup解析商品详情时,如何确保数据准确性?
java·爬虫
V+zmm101341 小时前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
坚定信念,勇往无前1 小时前
springboot单机支持1w并发,需要做哪些优化
java·spring boot·后端
丁总学Java1 小时前
`AdminAdminDTO` 和 `userSession` 对象中的字段对应起来的表格
java
陈无左耳、2 小时前
HarmonyOS学习第2天: 解锁语言与框架的无限可能
学习·华为·harmonyos
朝九晚五ฺ2 小时前
【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制
linux·运维·学习