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 等