Spring - IoC 源码阅读笔记:AbstractApplicationContext - postProcessBeanFactory()

in Tech Java

前言

Spring Boot Web 使用的 IoC 实现类为 AnnotationConfigServletWebServerApplicationContext ,该类继承了 ServletWebServerApplicationContext 并重写了 postProcessBeanFactory() 方法。

postProcessBeanFactory() 方法

AnnotationConfigServletWebServerApplicationContext#postProcessBeanFactory

    @Override
    protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
        // 直接调用父类方法
        super.postProcessBeanFactory(beanFactory);
        // 加载指定的basePackages
        if (this.basePackages != null && this.basePackages.length > 0) {
            this.scanner.scan(this.basePackages);
        }
        // 注册符合条件的类
        if (!this.annotatedClasses.isEmpty()) {
            this.reader.register(ClassUtils.toClassArray(this.annotatedClasses));
        }
    }

postProcessBeanFactory() 方法

ServletWebServerApplicationContext#postProcessBeanFactory

    @Override
    protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
        // WebApplicationContextServletContextAwareProcessor 用于向
        // 实现了 ServletContextAware 接口的 Bean 注入 ServletContext 
        // 或实现了 ServletConfigAware 接口的 Bean 注入 ServletConfig
        beanFactory.addBeanPostProcessor(new WebApplicationContextServletContextAwareProcessor(this));
        beanFactory.ignoreDependencyInterface(ServletContextAware.class);
        // 注册 Web 类型的 Scopes。默认两种:request、session
        registerWebApplicationScopes();
    }