前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring5.0源码深度解析之SpringBean的生命周期终结

Spring5.0源码深度解析之SpringBean的生命周期终结

作者头像
须臾之余
发布2019-07-31 17:20:33
6510
发布2019-07-31 17:20:33
举报
文章被收录于专栏:须臾之余

这篇文章,我们总结下SpringBean的生命周期

思考问题:SpringBean对象创建的时候,默认都会调用无参构造函数。

代码语言:javascript
复制
@Component
public class MemberServiceImpl implements InitializingBean,MemberService {
    public MemberServiceImpl() {
        System.out.println("1无参构造函数....说明对象初开始始化了");
    }

    public String login(String userName, String passWord) {
        //int i = 1 / 0;
        System.out.println(">>>>正在执行登陆业务逻辑>>>>> userName:" + userName + "passWord:" + passWord);
        return ">>>>登陆业务逻辑..<<<<";
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("2执行自定义bean的init方法");
    }
}

结果

1无参构造函数....说明对象初开始始化了 2执行自定义bean的init方法

那么这个MemberServiceImpl对象是交给spring到底是通过反射还是其它方式初始化的?

我们来验证下:

F8之后进入到这个方法,我们发现最终是通过反射来初始化对象

F8,走到这里,最终调用这个工具类进行反射初始化对象

代码语言:javascript
复制
return BeanUtils.instantiateClass(constructorToUse, new Object[0]); //反射初始化对象
} else {
    return this.instantiateWithMethodInjection(bd, beanName, owner);//CGLIB初始化对象
}

F8

f8,最终调用下面这个方法初始化对象

最后执行init方法

最后我们来总结下:

SpringBean的生命周期

1.进入到刷新refresh()方法 2.finishBeanFactoryInitialization()初始化所有单例对象 3.preInstantiateSingletons()初始化所有的单例对象:注意是非懒加载 4.getBean()-》doGetBean()先查询该对象是否有初始化过,没有的化就创建注册到IOC容器中 5.createBean()判断对象如果是单例的情况下,就调用该方法去创建对象 6.doCreateBean()创建IOC对象 7.createBeanInstance()使用Java的反射机制实例化我们的对象 8.populateBean()给对象的set属性赋值 9.initializeBean()执行初始化方法(也可以自己定义初始化的方法) 10.invokeAwareMethods()判断bean的类型是否是Aware相关依赖,如果存在的情况回调方法 11.applyBeanPostProcessorsBeforeInitialization()在初始化方法之前执行处理(增强) 12.invokeInitMethods()调用自定义的init方法,Java反射技术 13.applyBeanPostProcessorsAfterInitialization()在初始化方法之后执行处理(增强) 14.正常是用我们初始化好的这个Bean对象 15.销毁bean

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBean的生命周期
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档