############Spring#############
 Bean的生命周期是什么?
 BeanFactory和FactoryBean的区别?
 ApplicationContext和BeanFactory的区别?
 BeanFactoryAware注解,还有什么其它的Aware注解
 BeanFactoryAware方法和@Bean注解的方法执行顺序
问题:Aware和@Bean
- 实例化 Bean @Bean 方法执行,返回 Bean 对象
 Spring 会在解析配置类阶段(ConfigurationClassPostProcessor)执行这个方法(@Bean的方法),返回一个 Bean 实例
- 属性注入(依赖注入) 注入 @Autowired 字段或构造函数参数
- Aware 回调 执行 BeanNameAware, BeanFactoryAware, ApplicationContextAware 等
- 初始化回调 @PostConstruct / InitializingBean.afterPropertiesSet()
- 完成初始化 Bean 完成创建,交由容器使用
问题:@PostConstruct / InitializingBean.afterPropertiesSet()
 特性 @PostConstruct InitializingBean.afterPropertiesSet()
 所属范畴 JSR-250 标准注解 Spring 特有接口
 写法简洁 ✅ 是,注解方式,方法无参数 ❌ 否,需实现接口,覆盖方法
 执行时机 属性注入完成后 属性注入完成后
 适合多个方法初始化? ✅ 支持多个 @PostConstruct 方法 ❌ 只能有一个 afterPropertiesSet() 方法
 推荐程度 ✅ 推荐,优雅简洁 ⚠️ 次选,适合框架或基础设施类使用
 Bean 生命周期参与顺序位置 执行在 Aware 接口回调之后 执行在 Aware 接口回调之后
问题:Bean生命周期
 执行顺序:
-  构造方法(Constructor) 
-  依赖注入(字段、setter 方法) 
-  Aware 接口(如 BeanNameAware、ApplicationContextAware) 
-  @PostConstruct 方法 
-  InitializingBean.afterPropertiesSet() 
-  自定义 init-method(如果有) 
-  BeanPostProcessor.postProcessBeforeInitialization() 初始化前后增强,多用于自动代理、AOP、动态注入 
-  初始化完成 
-  BeanPostProcessor.postProcessAfterInitialization() 
-  Spring 容器完成刷新 
-  ApplicationRunner / CommandLineRunner 的 run() 方法 Spring 容器完全启动后,启动后逻辑、预热缓存、拉取远端配置等 Bean 构建过程 
 ┌───────────────────────────┐
 │ 构造函数 │
 │ 依赖注入(@Autowired) │
 │ Aware 接口回调(xxxAware)│
 │ @PostConstruct │
 │ InitializingBean / init() │
 │ BeanPostProcessor.before │
 │ — Bean 初始化完成 — │
 │ BeanPostProcessor.after │
 └───────────────────────────┘容器启动完成后
┌────────────────────────────┐
 │ ApplicationRunner / │
 │ CommandLineRunner.run() │
 └────────────────────────────┘
问题:BeanFactory和ApplicationContext(增强)
 项目 BeanFactory(原始) ApplicationContext(增强)
 定义 最基本的 IOC 容器接口 BeanFactory 的子接口,功能更丰富
 初始化时机 懒加载:按需创建 Bean 预初始化:容器启动时就创建单例 Bean
 适合场景 内存敏感、轻量级框架 企业开发、功能完整的应用
 是否支持国际化 否 是(有 MessageSource)
 是否支持事件机制 否 是(ApplicationEventPublisher)
 是否支持 AOP、注解 否 是(自动处理 @Autowired 等)
 是否支持 @PostConstruct 等生命周期管理 否 是
BeanFactory 是懒加载:调用 getBean() 时才真正创建 Bean
能力 BeanFactory ApplicationContext
 自动注入(@Autowired 等) ❌ ✅
 事件发布与监听(ApplicationEvent) ❌ ✅
 国际化支持 ❌ ✅
 环境变量访问(Environment) ❌ ✅
 Bean 后处理器(BeanPostProcessor 自动注册) ❌ ✅
BeanFactory
 ↑
 ├── ListableBeanFactory
 │ ↑
 │ HierarchicalBeanFactory
 │ ↑
 │ ApplicationContext(重点)
BeanFactory 是 Spring 最原始的容器,ApplicationContext 是功能齐全的高级容器。
 在 Spring Boot 中,默认用的就是 ApplicationContext(比如 AnnotationConfigApplicationContext)。
问题:BeanFactory和FactoryBean的区别?
 BeanFactory:Spring 的 容器接口,负责管理和创建 Bean。
 FactoryBean:你定义的一个 工厂 Bean,用于自定义创建某个对象的方式。
FactoryBean 是你定义的一个 Bean,用来创建其他 Bean。Spring 会调用它的 getObject() 方法返回真正的 Bean。
 你可以用它来封装复杂对象的创建逻辑(如代理对象、单例池对象、适配第三方库对象等)。
// 加个 & 前缀,表示获取工厂 Bean 本身
 MyFactoryBean factoryBean = (MyFactoryBean) context.getBean(“&myBean”);