spring源码-之生命周期详解

Spring Bean生命周期核心方法简化如下

public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory {

    protected Object createBean(String beanName, RootBeanDefinition mbd, Object[] args) throws BeanCreationException {
        // 实例化
        BeanWrapper instanceWrapper = createBeanInstance(beanName, mbd, args);

        // 填充属性值
        applyPropertyValues(beanName, mbd, bw, pvs);

        // BeanNameAware
        invokeAwareMethods(beanName, bean);

        // 初始化前置
        Object bean = initializeBean(beanName, bean, mbd);

        // PostInitialization
        bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);

        // Destruction
        registerDisposableBeanIfNecessary(beanName, bean, mbd);

        return bean;
    }

    protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinition mbd) {
        // Custom initialization method
        invokeInitMethods(beanName, bean, mbd);

        // afterPropertiesSet() method
        invokeAwareMethods(beanName, bean);

        // Custom post-initialization method
        bean = applyBeanPostProcessorsBeforeInitialization(bean, beanName);

        return bean;
    }

    protected void destroyBean(final String beanName, final Object bean) {
        // Custom destroy method
        invokeCustomDestroyMethod(beanName, bean);

        // DisposableBean interface
        if (bean instanceof DisposableBean) {
            ((DisposableBean) bean).destroy();
        }
    }
}
posted @ 2023-04-12 20:41  itqczzz  阅读(13)  评论(0编辑  收藏  举报