Bean后置处理器 – applyMergedBeanDefinitionPostProcessors

Bean后置处理器 - applyMergedBeanDefinitionPostProcessors

创建完对象之后, 接下来, 就应该想办法对属性进行注入了, 其中就包括 @Autowired 注入

但是在注入之前, 貌似 还没有对 @Autowired 进行扫描和解析.

代码块:

if (instanceWrapper == null) {
    /**
     * 创建 bean 实例,并将实例包裹在 BeanWrapper 实现类对象中返回。
     * createBeanInstance中包含三种创建 bean 实例的方式:
     *   1. 通过工厂方法创建 bean 实例
     *   2. 通过构造方法自动注入(autowire by constructor)的方式创建 bean 实例
     *   3. 通过无参构造方法方法创建 bean 实例
     *
     * 若 bean 的配置信息中配置了 lookup-method 和 replace-method,则会使用 CGLIB 增强 bean 实例。
     */
    instanceWrapper = createBeanInstance(beanName, mbd, args);
}
final Object bean = instanceWrapper.getWrappedInstance();
Class<?> beanType = instanceWrapper.getWrappedClass();
if (beanType != NullBean.class) {
    mbd.resolvedTargetType = beanType;
}

// Allow post-processors to modify the merged bean definition.
synchronized (mbd.postProcessingLock) {
    if (!mbd.postProcessed) {
        try {
            //调用属性合并后置处理器, 进行属性合并
            //这里会进行 一些注解 的扫描
            //CommonAnnotationBeanPostProcessor -> @PostConstruct @PreDestroy @Resource
            //AutowiredAnnotationBeanPostProcessor -> @Autowired @Value
            applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);
        }
        catch (Throwable ex) {
            throw new BeanCreationException(mbd.getResourceDescription(), beanName,
                    "Post-processing of merged bean definition failed", ex);
        }
        mbd.postProcessed = true;
    }
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Bean后置处理器 – applyMergedBeanDefinitionPostProcessors