作者回复: 答案在 org.springframework.context.support.AbstractApplicationContext#prepareBeanFactory 方法中,其中:
beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
beanFactory.registerResolvableDependency(ResourceLoader.class, this);
beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
beanFactory.registerResolvableDependency(ApplicationContext.class, this);
以上代码明确地指定了 BeanFactory 类型的对象是 ApplicationContext#getBeanFactory() 方法的内容,而非它自生。
作者回复: 👍
作者回复: 🤙
作者回复: 你已经很厉害了,不少人看了 10 遍 🤣
作者回复: 总结到位~
作者回复: 感谢夸奖,我们一起加油~
作者回复: 慢慢来,Spring 确实很复杂,尤其是 BeanFactory 和 ApplicationContext 的细节,需要一定的记忆~
作者回复: 感谢支持~
作者回复: 感谢支持,作为分享者,我内心是非常感动的~
作者回复: 这个对象实际是由 org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory 方法生成
作者回复: 这个我反复提及 BeanFactory 几乎唯一的实现是 DefaultListableBeanFactory
作者回复: 是的,ApplicationContext 是使用了代理模式,也使用了面门模式。
作者回复: 是的,就是这样~
作者回复: IoC 实际容器是 BeanFactory 的实现
作者回复: 这样设计相对简单,将 ApplicationContext 作为 Facade 提供一个大而全的 API
作者回复: 那就是 1/2 速度呗
作者回复: 参考一下我给 aksonic 回复的内容,里面已经提到了,它是一种特殊的依赖注入。
作者回复: 是的,就是委派