springBean的生命周期 面试好记无废话

springBean生命周期
实例化阶段
1.spring读取xml配置文件,容器就会调用doCreateBean方法进行实例化,底层是通过工厂+反射完成的创建
2.bean实例化后,进行bean对象属性填充
3.执行Aware接口的方法,spring会检查bean对象是否实现了Aware接口,通过Aware接口我们可以拿到spring为我们提供的一些资源,比如实现了BeanNameAware接口获取beanName,实现BeanFactoryAware接口可以获取工厂对象
.
初始化阶段
1.检查是否实现了BeanPostProcessor接口执行postProcessBeforeInitialization()对bean进行前置初始化
2.检查是否实现了InitializingBean接口如果实现了就调用afterPropertiesSet方法完成初始化 使用场景比如我们想在对象创建完之后调用其他bean对象的方法可以在afterPropertiesSet方法完成调用,
如果你是在构造方法里进行调用其他bean的对象或者在普通代码块调用都会出现空指针异常,这是因为你调用bean对象没有完成实例化,afterPropertiesSet方法是在所有bean对象完成实例化后进行执行的
3.检查是否实现了BeanPostProcessor后置处理接口执行ProcessAfterInitialization()方法,可以获取这个bean对象添加一些默认值的属性,甚至可以返回一个代理对象
.
销毁阶段
4.检查bean对象是否实现DisposbleBean接口调用destroy方法
以下生命周期的方法,打印结果可以观察执行顺序====================================
@Configuration
public class MyBean implements InitializingBean,BeanPostProcessor, BeanFactoryAware, BeanNameAware {

    @Bean
    public UserService userService(){
        return new UserService();
    }

    @Bean
    public OrderService orderService(){
        return new OrderService();
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean ");
    }


    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessBeforeInitialization ="+bean);
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("postProcessAfterInitialization ="+bean);
        return bean;
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("BeanFactoryAware ="+beanFactory.hashCode());
    }

    @Override
    public void setBeanName(String beanName) {
        System.out.println("BeanNameAware ="+ beanName);

    }
}

打印

BeanFactoryAware =963601816
BeanNameAware =myBean
BeanFactoryAware =963601816
InitializingBean 
postProcessBeforeInitialization =com.yujie.config.service.UserService@2133814f
postProcessAfterInitialization =com.yujie.config.service.UserService@2133814f
postProcessBeforeInitialization =com.yujie.config.service.OrderService@4c15e7fd
postProcessAfterInitialization =com.yujie.config.service.OrderService@4c15e7fd

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值