0%

Spring启动相关

Spring启动相关

BeanFactoryPostProcessor(Bean 工厂后置处理器)和BeanPostProcessor(Bean 后置处理器)是什么,有什么区别?

  • BeanFactoryPostProcessor:在创建 Bean之前,先修改Bean 的定义信息,不直接接触实体。
  • BeanPostProcessor:在Bean 实例化完成后,修改 Bean 实例,直接操作实体。

Spring 容器执行流程(辅助理解)

  1. 加载配置文件 / 注解,生成所有 BeanDefinition;
  2. 执行所有 BeanFactoryPostProcessor(修改 BeanDefinition);
  3. 遍历 BeanDefinition,实例化 Bean(调用构造方法创建对象);
  4. 对每个 Bean 执行 BeanPostProcessor.postProcessBeforeInitialization
  5. 执行 Bean 的初始化方法(@PostConstruct、init-method);
  6. 对每个 Bean 执行 BeanPostProcessor.postProcessAfterInitialization
  7. Bean 加入容器,完成初始化。

FactoryBean和BeanFactory是什么,有什么区别?

  • BeanFactory:是 Spring 容器的核心接口,相当于整个「工厂」的总控台,负责管理所有 Bean 的创建、存储、获取,是所有 Bean 的「大管家」。

  • FactoryBean:是一个特殊的 Bean,相当于工厂里的「特殊工人」—— 这个工人不直接生产产品,而是专门负责创建某一类特定的 Bean 实例,是创建 Bean 的「专用工具」。

核心方法

FactoryBean 接口定义了 3 个核心方法:

  1. T getObject():返回创建的目标 Bean 实例;
  2. Class<?> getObjectType():返回目标 Bean 的类型;
  3. boolean isSingleton():返回目标 Bean 是否是单例(默认 true)。

FactoryBean 的特殊获取规则

  • 直接通过 getBean("beanName") 获取的是 FactoryBean.getObject() 返回的目标 Bean
  • 要获取 FactoryBean 本身,需要在名称前加 &,即 getBean("&beanName")

ApplicationContext 和 BeanFactory 的关系

ApplicationContext 继承并扩展BeanFactory 接口,是 Spring 对基础 IoC 容器的增强实现。可以理解为:

  • BeanFactory = Spring 容器的「基础版」(只实现核心 IoC 功能);
  • ApplicationContext = Spring 容器的「完整版」(包含基础版所有功能 + 丰富的扩展功能)。
-------------本文结束感谢您的阅读-------------