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

简介: 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。


相关文章
|
1月前
|
缓存 安全 Java
Spring Security通用权限管理模型解析
Spring Security作为Spring生态的核心安全框架,结合RBAC与ACL权限模型,基于IoC与AOP构建灵活、可扩展的企业级权限控制体系,涵盖认证、授权流程及数据库设计、性能优化等实现策略。
155 0
|
1月前
|
缓存 安全 Java
Spring Security权限管理解析
Spring Security是Spring生态中的核心安全框架,采用认证与授权分离架构,提供高度可定制的权限管理方案。其基于过滤器链实现认证流程,通过SecurityContextHolder管理用户状态,并结合RBAC模型与动态权限决策,支持细粒度访问控制。通过扩展点如自定义投票器、注解式校验与前端标签,可灵活适配多租户、API网关等复杂场景。结合缓存优化与无状态设计,适用于高并发与前后端分离架构。
159 0
|
1月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
12天前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
12天前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
1月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
541 1
|
Java Spring 容器
Spring中BeanFactory和FactoryBean的区别?
一位工作了4年的小伙伴,去京东面试被问到这样一个问题,Spring中的BeanFactory和FactoryBean有什么区别?因为没有看过源码,当时就感觉这是一个文字游戏,感觉没什么区别? 那今天,我就给大家来聊清楚。另外,往期面试题解析中配套的文档我已经准备好,想获得的可以在我的煮叶简介中找到。好了,我们先来看BeanFactory。
169 0
|
XML Java 数据格式
Spring中BeanFactory和FactoryBean详解
Spring中BeanFactory和FactoryBean详解
665 1
|
XML Java 数据格式
Spring5源码(8)-BeanFactory和FactoryBean的区别
Spring5源码(8)-BeanFactory和FactoryBean的区别
125 0

推荐镜像

更多
  • DNS