当前位置: 首页 > news >正文

SpringBean模块(三)具有生命周期管理能力的类(1)AutowireCapableBeanFactory

一、介绍

1、简介

AutowireCapableBeanFactory 是 Spring 框架中的一个接口,位于 org.springframework.beans.factory 包下,它提供了更底层的 Bean 实例化、依赖注入和生命周期管理能力,即使这些 Bean 没有通过常规的 @Component 或 XML 注册到 Spring 容器中

2、常见用途
  • 手动创建对象并注入依赖

  • 将已有对象注入到 Spring 容器的上下文中

  • 在运行时对非 Spring 管理的类进行依赖注入

3、注意事项
  • 它不会将对象注册为 Spring 管理的单例。如果你想让对象作为 Bean 注入到其他地方,需要再使用 BeanDefinitionRegistry 注册。

  • 使用时一定要确保 Spring Context 已初始化完成(通常在 ApplicationReadyEvent 之后执行)。

4、典型用法
@Autowired
private AutowireCapableBeanFactory beanFactory;public void createAndInject() {// 创建实例(没有依赖注入)MyCustomBean obj = new MyCustomBean();// 注入依赖字段beanFactory.autowireBean(obj);// 或者:创建并自动注入所有依赖MyCustomBean autowiredBean = (MyCustomBean) beanFactory.createBean(MyCustomBean.class);
}

二、常见API

方法功能
autowireBean(Object existingBean)对已有对象进行自动注入(字段、setter)
createBean(Class<T> beanClass)创建并自动注入一个 Bean 实例
configureBean(Object existingBean, String beanName)对现有 Bean 进行完整配置(包括注入、初始化等)
initializeBean(Object existingBean, String beanName)执行 Bean 生命周期相关的初始化逻辑
applyBeanPostProcessorsBeforeInitialization/AfterInitialization手动触发 BeanPostProcessor

三、使用场景

1、运行时注册动态 Bean 并注入依赖
MyService myService = new MyService(); // new 出来的,不是 Spring 管理的
beanFactory.autowireBean(myService);  // 手动注入依赖(如 @Autowired 字段)
2、在插件或动态模块中加载的类想要使用主项目 Bean
Object pluginBean = classLoader.loadClass("com.example.PluginImpl").newInstance();
beanFactory.autowireBean(pluginBean); // 注入主项目中的 Service 等

相关文章:

  • JAVA基础——方法和类型转换
  • 操作系统————四种动态分区分配算法详解(首次适应,最坏适应,最佳适应,邻近适应)
  • 【Java高阶面经:微服务篇】3.熔断机制深度优化:从抖动治理到微服务高可用架构实战
  • Python Day27 学习
  • Linux僵死进程以及文件操作
  • LW-CTrans:一种用于三维医学图像分割的轻量级CNN与Transformer混合网络|文献速递-深度学习医疗AI最新文献
  • RFID技术在半导体晶圆卡塞盒中的应用方案
  • 计算机可以深度结合、并且很有发展空间的领域
  • 机器学习 day05
  • Git客户端安装、操作
  • Vue3 中使用 provide/inject 实现跨层级组件传值失败的原因及解决方案
  • Vue之入门(Vue是什么以及Vue工作原理)
  • 数据要素如何重构人力资本升级
  • 消息传递--树形dp--50?!
  • windows/linux 模拟鼠标键盘输入
  • 创建型:建造者模式
  • 文件操作和IO—初识文件
  • leetcode hot100:三、解题思路大全:哈希(两数之和、字母异位词分组、最长连续序列)、双指针(移动零、盛最多水的容器、三数之和、接雨水)
  • 《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》
  • COMSOL软件入门
  • 墨西哥军方:军舰撞桥时由纽约引航员指挥操作
  • 马上评|把孩子当牟利工具,这样的流量吃不得
  • 宋鹍已任首都机场集团有限公司董事长、党委书记
  • 外交部:国际调解院着眼以调解定分止争,更好维护国际公平正义
  • 王毅同丹麦外交大臣会谈,表示在格陵兰问题充分尊重丹麦主权和领土完整
  • 上海肺科医院院长陈昶:临床中的痛点,正是新技术诞生的起点