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

Spring源码学习(五)--SpringBean生命周期

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

Spring源码学习(五)--SpringBean生命周期

一,图示

 图片参考:面试必备系列:阿里架构师深度解析spring源码IOC原理,讲的如此清晰明了_哔哩哔哩_bilibili

这个老师讲的还是不错的.  由浅入深, 清晰明了. 我喜欢. 

二,动手验证

       Spring提供了很多接口给我们使用, 目的就是让我们开发者可以干预Bean的创建过程, 做一些我们想做的事儿. 另一方面是提供给它自己实现功能使用, 是从设计上考量的. 

        再一个, 这些东西基本在我们的项目开发中基本不会见到, 但是我们还是需要了解一下这个过程, 对于我们整体把握源码时有意义的. 

        Spring提供的很多接口一般后缀都是有 Aware(发现的意思),  Processor(处理器), Initialize, Disposable等字样.

        带有prototype的bean是不会进入到单例池中的.也就是说不会被SpringIOC所管理

@Component
public class TestLifeFlow implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, BeanPostProcessor, InitializingBean, DisposableBean {

    @Autowired
    private Person person;


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

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



    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("applicationContext = " + applicationContext);
    }

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

    @PostConstruct
    public void postConstruct() {
        System.out.println("PostConstruct");
    }

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

    @PreDestroy
    public void preDestroy() {
        System.out.println("destroy....");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("销毁了哦.....");
    }
}

三. 启动日志 

        大概格式: 

                1. 先打印我们上方干预方法输出的东西

                2. 打印postProcessBeforeInitialization方法    

                         这儿会输出所有Bean

                3. 打印postProcessAfterInitialization方法    

                          这儿会输出所有Bean

 

 

四,思考: 

        学习了SpringBean的生命周期后, 我们就可以在某些位置去干预. 而且对于我们了解源码也更近一步, 因为我们认识了挺多Spring提供的新的玩意儿.  

        上方有一个 BeanPostProccessor, 还有一个 BeanFactoryPostProcessor 两个接口. 

        BeanPostProccessor  就是对Bean创建前后进行拦截处理.  

        同理: 

        BeanFactoryPostProcessor  就是对BeanFactory顶层对象创建前后进行拦截处理. 

        带有PostProcessor的我们称为后置处理器. 

五, 大概浏览源码主要步骤 

        会感觉到有很多单词已经不太陌生了. 因为我们又前进了一步. 

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

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

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