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 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 等

你可能感兴趣的:(#,Spring,java)