前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springIOC源码分析

springIOC源码分析

作者头像
一头小山猪
发布2020-06-15 17:37:41
3450
发布2020-06-15 17:37:41
举报
文章被收录于专栏:微光点亮星辰微光点亮星辰

之前的javaweb基础分享的差不多了。最近研究了一下spring,分享给大家!

学好spring 是有必要的 有人说spring就是javaee,javaee就是spring 。说对也对,说不对也不对。 当然本质肯定是不对了。 那为什么说对呢。 可能是他的强大。他能把其他的框架都能友好的整合在他的怀抱里,而且整合的规定都是一致的,做到这点很v587

spring的核心在于ioc和aop ioc 与aop ioc 其实没什么说的 核心思想是控制反转,更能体现的词是依赖注入。需要什么类,我们就注入什么类到Ioc容器。最强大的刚才已经说了,他能注入很多框架,比如orm框架的 hibernate,mybatis等等。也能整合mvc的框架,比如struts2 springmvc等等。方式都一样。ioc的原理应该是好好研究一番的。用起来很简单,但是底层挺复杂的,我也只是研究过了一点。可以想一下xml注入的方式。为什么是全类名,为什么用id标识 源码。其实IOC容器就是一个CurrentHashMap,也就是个一键值对的map,键是String类型的,存放的是id标识。值是Object,存放的是通过反射获得的对象。(CurrentHashMap了解的不多,底层就是一个数组,数组中存放的都是链表,而链表实现就是类自身通过next的关联,至于为什么是用CurrentHashMap,考虑到并发时线程安全和效率,它强于hashTable和锁的包装)。ioc容器初始化时,会加载很多非注入bean的操作,比如beanfactory的创建,日志同步,转化器,监听器等等,源码最终可定位到AbstractApplicationContext。

如下

该refresh方法是springioc容器的核心处

这些是refresh方法里的一些方法,做一下初始化的操作,刚才也说了 日志时间的同步。转化器等

然后到下面这个方法 。初始化ioc容器前bean注入的操作

也就是说,第一次初始化ioc容器的时候也会去从map中获取,而map中没有,此处的map也就是ioc。会通过一个方法创建实例,会通过一个方法

初始化实例,以后从map中获取就不会创建对象了。但值得注意的是,如果哪个bean发生更改,ioc会销毁,然后出现初始化。

在自动装配的时候spring 都能自动进行这些getbean操作。

好啦。今天就这样吧,下次我再说spring中的aop。小编由于自己刚总结完,csdn没能来得及审核。

推荐看一下这个链接的spring的ioc原理 狠牛。

http://www.cnblogs.com/ITtangtang/p/3978349.html


如果喜欢我们的微信公众号,请长按下方二维码关注哦。你不关注一下吗?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微光点亮星辰 微信公众号,前往查看

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

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

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