博客
关于我
Spring BeanFactory 详解
阅读量:586 次
发布时间:2019-03-09

本文共 1680 字,大约阅读时间需要 5 分钟。

BeanFactory 介绍

BeanFactory 是 Spring 应用程序的核心配置管理和对象创建中心。它作为 bean 容器的客户端接口,负责加载和管理 application components。任何依赖注入的操作都通过 BeanFactory实现,比如通过构造函数或 setter 方法注入。如果采用 lazy loading,则可以控制资源的初始化时机。

BeanFactory 的主要作用包括:

  • 作为中央配置管理平台,集中管理应用程序的 components 和配置;
  • 支持多种 bean 定义方式,如 XML、属性文件、数据库等;
  • 根据配置确定每个 bean 的实例类型(Singleton 或 Prototype)。
  • 与传统的工厂模式相比,BeanFactory 提供了更高的灵活性。通过 centralized配置,开发者无需在每个类中显式读取配置文件,简化了代码管理。但要正确 使用 BeanFactory,建议采用依赖注入机制(push configuration),而不是通过查找(pull configuration)。

    BeanFactory 的工作流程

  • 通过读取配置文件(如 XML)或其他数据源,解析 bean 定义;
  • 根据 bean 的定义,创建相应的实例,具体实例数取决于配置:
    • 若标记为 Singleton,则返回唯一实例;
    • 若标记为 Prototype,则每次请求获取新实例(通过 lazy loading)。
  • 支持父工厂继承机制,如果当前工厂未找到 bean,会询问父工厂,此外也应注意 bean 的定义顺序。
  • Bean 的生命周期管理包括初始化方法调用和销毁操作。初始化顺序遵循标准接口的定义:
    • priority关系:BeanNameAware → BeanClassLoaderAware → BeanFactoryAware → EnvironmentAware → ... →customize方法。
    • 销毁过程则遵循 DestructionAwareBeanPostProcessor 的机制。
  • BeanFactory 实现要点

  • 依赖注入:通过 setter 或 constructor 注入 values 或 resources,BeanFactory支持各种 aware 接口,如 EnvironmentAware、ResourceLoaderAware 等。依赖注入是优化配置管理的核心方式。
  • 灵活的 bean 定义方式:支持多种数据源,如 LDAP、RDBMS、XML 或 properties 文件等。不同的实现可根据具体需求选择。
  • 面向接口设计:BeanFactory 接口定义了标准的 getBean 方法,允许实现灵活扩展。例如,ListableBeanFactory 提供按类型查找的功能。
  • 安全性管理:BeanFactory 需要管理 own instance 是否已经加载,以防止重复加载或多个线程同时访问导致的问题。
  • BeanFactory 的注意事项

    • 避免.getBean() 超频:如果频繁调用 getBean 可能导致性能问题,应使用 Provider 或 ResolvableType 加载懒惰实例。
    • ** Coneurrency Handling **:确保在多线程环境中正确管理 bean 实例。
    • ** Graceful Shutdown **:在关闭 BeanFactory 时,确保调用 destruction 方法,释放资源并调用 postProcessors。

    BeanFactory 的类图示略

    (此处应放置 BeanFactory 的类图,但因图片链接已移除,故此处用文字表示)

    BeanFactory 接口是核心,而其实现类(如 DefaultBeanFactory)则负责具体实现各种功能模块。

    通过上述介绍,BeanFactory 已经成为理解 Spring 内部工作机制的基础知识。希望本文能帮助开发者更好地掌握 Spring 的核心容器管理机制。

    转载地址:http://usdpz.baihongyu.com/

    你可能感兴趣的文章
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_三项内容_Spring Security OAuth2.0认证授权---springcloud工作笔记141
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_授权码模式_Spring Security OAuth2.0认证授权---springcloud工作笔记144
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2.0四种模式的详解
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    oauth2登录认证之SpringSecurity源码分析
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>