Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道

BeanFactory

BeanFactory 是 Spring 框架中最基础、最核心的接口之一,它提供了 IoC(控制反转)容器的基本功能。BeanFactory 负责管理应用程序中的各种组件(Bean),包括它们的配置、创建、装配和管理。

下面是 BeanFactory 的一些重要特点和功能:

  1. Bean 定义 BeanFactory 通过 BeanDefinition 来管理 Bean 的定义,BeanDefinition 中包含了 Bean 的类名、依赖关系、初始化方法、销毁方法等配置信息。这些信息通常是通过 XML 配置文件或注解方式进行配置的。
  2. 延迟初始化 BeanFactory 支持延迟初始化,即在真正需要使用 Bean 的时候才进行初始化。这样可以节省系统资源,并提高性能。
  3. Bean 实例化 BeanFactory 负责根据配置信息来实例化 Bean 对象,并管理它们的生命周期。可以根据需要创建单例、原型等不同类型的 Bean。
  4. 依赖注入 BeanFactory 实现了依赖注入,即管理 Bean 之间的依赖关系。它会自动将依赖的 Bean 注入到目标 Bean 中,从而实现解耦和灵活性。
  5. AOP 支持 BeanFactory 支持 AOP(面向切面编程),可以通过配置来实现切面、通知等功能,从而实现对应用程序的横切关注点的管理。
  6. 国际化支持 BeanFactory 提供了国际化的支持,可以方便地实现应用程序的国际化和本地化。

Spring 框架提供了多个 BeanFactory 的实现类,包括 XmlBeanFactory、DefaultListableBeanFactory 等。在实际开发中,通常会使用 ApplicationContext 接口及其实现类,例如 ClassPathXmlApplicationContext、AnnotationConfigApplicationContext 等,因为它们提供了更多的功能和特性,但它们都是以 BeanFactory 为基础构建的。

BeanFactory 体系

  1. BeanFactory:Spring 体系最底层工厂接口,定义工厂的基本操作。
  2. HierarchicalBeanFactory:主要用于父子工厂的管理。可以在 Spring 上下文中创建一个层次结构,使得每个层次都可以有自己的 Bean 定义,同时还可以访问父级工厂中定义的 Bean。
  3. ConfigurableBeanFactory:可以在 Spring 应用中更灵活地配置和管理 Bean 工厂的行为,例如需要对 Bean 的作用域、类加载器、自动装配等方面进行更精细的控制。
  4. AutowireCapableBeanFactory:允许在运行时动态地进行 Bean 的创建和自动装配。
  5. ListableBeanFactory:提供了对容器中所有 Bean 的一些基本信息的检索功能,使得开发者可以方便地查找、遍历和操作容器中的 Bean。
  6. DefaultListableBeanFactory:较为高级的工厂,Spring 容器的核心组成部分之一,它实现了 BeanFactory 接口及其子接口,提供了对 Bean 的注册、实例化和依赖注入等核心功能的实现。在 Spring 应用程序中,当我们使用注解或XML配置定义 Bean 时,底层容器就会使用 DefaultListableBeanFactory 进行相应的管理和处理。
  7. XmlBeanFactory:在旧版本的 Spring 中曾经是用于从 XML 配置文件中加载 Bean 定义的一个类(配合工具类 XmlBeanDefinitionReader),但需要注意的是,它在较新版本的 Spring 中已经被废弃,并推荐使用 ApplicationContext 的实现类,比如 ClassPathXmlApplicationContext 或 FileSystemXmlApplicationContext 等。
  8. SimpleJndiBeanFactory:是 BeanFactory接口基于 JNDI(访问命名和目录服务) 的简单实现。可以在分布式环境中查找和访问各种命名服务(数据库、消息队列等)的标准方式。
  9. ApplicationContext:Spring 的 高级工厂、核心容器,用于管理和组织应用程序的组件,负责加载、配置和管理Bean的生命周期,它可以从多种来源(如XML文件、注解、Java配置等)读取配置信息,并根据配置信息创建和管理Bean对象。

最强大的两个工厂:DefaultListableBeanFactory 和 ApplicationContext,均集成了上述主要工厂的核心能力!

XmlBeanFactory

在源码学习的时候可以跟踪 XmlBeanFactory 的运行流程,因为它继承了 DefaultListableBeanFactory 这个高级工厂~

使用方法如下:

public class XmlBeanFactoryTest {
    private BeanFactory factory;
    @Before
    public void before() {
        // 指定配置文件,创建 Spring 工厂
        factory = new XmlBeanFactory(new ClassPathResource("/applicationContext.xml"));
    }
    /**
     * 通过 Spring 的工厂获得对象
     */
    @Test
    public void testGetBean() {
        User user = (User) factory.getBean("user");
        System.out.println(user);
    }
}

读取配置文件时使用 ClassPathResource 类,读取类路径下相关资源文件的内容(applicationContext.xml),获得输入流封装为 Java 的对象 BeanDefinition,对应配置文件中一个个的 标签。

Spring 中使用的 XML 解析技术使用的是 SAX,而不是 XPath。


相关文章
|
24天前
|
XML 安全 Java
|
2天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
6天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
34 6
|
8天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
53 3
|
22天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
32 1
|
1天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
1天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
27天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
103 2
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
2天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析

推荐镜像

更多