SpringBean的生命周期

SpringBean的生命周期

  1. 实例化 (构造方法)
  2. 属性赋值 (setter)
  3. 初始化
  4. 销毁
    如下三个方法与上面的3个生命周期一一对应
    protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
        throws BeanCreationException {

    // Instantiate the bean.
    BeanWrapper instanceWrapper = null;
    if (instanceWrapper == null) {
        // 实例化阶段!
        instanceWrapper = createBeanInstance(beanName, mbd, args);
    }

    // Initialize the bean instance.
    Object exposedObject = bean;
    try {
        // 属性赋值阶段!
        populateBean(beanName, mbd, instanceWrapper);
        // 初始化阶段!
        exposedObject = initializeBean(beanName, exposedObject, mbd);
    }

    
    }
根据上面主要的四个生命周期,还有些围绕四个生命周期扩展的Bean方法

第一大类接口:

  • BeanPostProcessor
  • InstantiationAwareBeanPostProcessor
    上述两个是Spring扩展中较为重要的两个类

第二大类接口:

  • Aware类型的接口 (获取spring中的资源,都是在初始化之前调用的)
    • BeanNameAware (获取bean的名称)
    • BeanClassLoaderAware (获取bean的加载器)
    • BeanFactoryAware (获取bean的工厂)
    • EnvironmentAware (获取上下文环境)
    • EmbeddedValueResolverAware (如果需要让自己自定义的注解支持spel表达式的时候可以使用,就需要这个)
    • ApplicationContextAware(ResourceLoaderAware\ApplicationEventPublisherAware\MessageSourceAware) (为了返回ApplicationContext对象)
  • 生命周期接口
    • InitializingBean (对应生命周期初始化阶段)
    • DisposableBean (生命周期的销毁阶段)

最后可以谈一下面试常见的ApplicationContext和BeanFactory的区别

ApplicationContext:对于Bean的加载属于是延迟加载,从容器中用到的时候才回去实例化
Spring底层的接口,提供了最简单的实例化对象和获取对象的功能
BeanFactory:在启动的时候就将所有的Bean都实例化了.它还可以为Bean配置lazy-init=true来让Bean延迟实例化;

  • 国际化(MessageSource)
  • 访问资源,如URL和文件(ResourceLoader)
  • 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web
  • 消息发送、响应机制(ApplicationEventPublisher)
  • AOP(拦截器)

如果喜欢博主,可以关注我的公众号哈
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值