栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870195.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号