简介
在应用程序上下文完成其标准初始化后,修改其内部的BeanFactory。此时,所有的bean定义都已经加载完成,但还没有任何bean被实例化。这允许在某些ApplicationContext实现中注册特殊的BeanPostProcessor等。
- 在应用程序上下文的初始化过程中,会经历多个阶段。其中,一个关键阶段是加载bean定义。这些定义描述了应用程序中需要创建哪些bean,以及这些bean的属性和依赖关系。一旦所有的bean定义都加载完成,但尚未创建任何bean实例时,提供了一个时机来修改应用程序上下文的内部BeanFactory。
- 这个时机特别重要,因为它允许你在bean实例化之前,注册一些特殊的BeanPostProcessor。BeanPostProcessor是Spring框架中的一个重要概念,它允许开发者在bean的生命周期中的特定点执行自定义逻辑。例如,你可以在bean创建之前或之后执行一些操作,或者在bean的属性设置之后执行一些操作。
- 在某些ApplicationContext的实现中,可以利用这个时机来注册这些特殊的BeanPostProcessor。这通常是通过编程方式在bean定义加载后、bean实例化前添加BeanPostProcessor到上下文的BeanFactory中。这样,当后续的bean开始实例化时,这些BeanPostProcessor就会被自动调用,从而能够影响或修改bean的创建过程。
postProcessBeanFactory()方法
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {//提供子类实现
}
AbstractRefreshableWebApplicationContext#postProcessBeanFactory()方法
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {//增加ServletContextAwareProcessor后置处理器beanFactory.addBeanPostProcessor(new ServletContextAwareProcessor(this.servletContext, this.servletConfig));//忽略一些依赖接口 并且实现了下面这两个接口的类需要 ServletContextAwareProcessor来处理beanFactory.ignoreDependencyInterface(ServletContextAware.class);beanFactory.ignoreDependencyInterface(ServletConfigAware.class);//注册bean在web应用程序中的作用域以及解析作用域的工厂WebApplicationContextUtils.registerWebApplicationScopes(beanFactory, this.servletContext);//注册ServletContext 属性,其他 Web 环境相关的 BeanWebApplicationContextUtils.registerEnvironmentBeans(beanFactory, this.servletContext, this.servletConfig);}