`
leogao_emcom
  • 浏览: 81133 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Spring框架核心源代码的分析及其感受-IOC篇-4

阅读更多

从上一篇,我知道了我们想get的 Bean是怎么实例化出来的,也知道了依赖注入实际是发生在BeanWrapperImpl这个类里面的,接下来我们来看看这个类的实现(也就是applyPropertyValues(beanName, mbd, bw, pvs)  方法里面干的事情):

....
if (propValue.getClass().isArray()) 
{
......
}
else if (propValue instanceof List) 
{
............
}
else if (propValue instanceof Map) {
......
}

......
writeMethod.invoke(object, value);

 

前面的源代码直接就可以看到对数组、list、Map注入的实现,这里省略的实现,因为代码太长了,大家直接自己到这个方法中去看,一看就看得明白,关键是最后这句话writeMethod.invoke,看到了吧,这个writeMethod是JDK反射包里面的Method类,而一个属性其实也是一个方法,所以用invoke把具体的值(可能是一个其他bean,也是有beanFactory实例化的,这里就不重述了),直接注入到了目标对象的目标属性上了,而目标属性是BeanDefinition中保存的ref的name值指定的,就是在XML配置文件中Bean节下的property子元素中定义的东西。

 

好了,通过前面好几篇的分析,我们已经知道了对象的创建、依赖注入的实现,其实还差上一步,那就是在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中调用populateBean方法之后(请参考前面的文章),把创建的并注入好依赖对象或值的Bean放到一个Map中了,而这个Map是BeanFactoey的对象级别的全局变量,它用来缓存各种被创建出来的Bean,这个就是为什么BeanFactory被成为容器的原因,实际上这就是一个隐喻,具体实现是非常简单的,另外从上面的分析可以看出,IOC的实现是如此简单,没有用到什么时髦的技术,最多用到了OO的设计思想(模板模式,继承,组合等等)和SAX以及反射而已,这又一次佐证了这样一个观点:学好最基础的东西+设计思想+方法+好的想象力,就能作出好东西!软件其实很不难!但是这只是从spring的源代码分析中得到的结论,其实在你分析多了,用多了,写得多了的时候,你会发现确实是这个道理!

 

下一步,还会有两篇:

1)Spring IOC源码分析总结(包含自动装配)

2)Spring AOP源代码分析-1(AOP第一篇)

0
0
分享到:
评论

相关推荐

    springIOC核心组件分析.vsdx

    pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 ...

    Spring源代码解析

    Spring源代码解析(一):IOC容器 Spring源代码解析(二):IoC容器在Web容器中的启动 Spring源代码解析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源...

    spring框架学习源代码

    spring框架技术学习全套源代码,包含jar包。详细操作spring的aop和ioc,spring的bean管理(注解),配置文件与注解的使用和事务管理

    spring源码分析(1-10)

    Spring源代码解析(二):ioc容器在Web容器中的启动 Spring源代码分析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源代码解析(六):Spring声明式事务处理...

    Spring源代码解析.rar

    Spring源代码解析1:IOC容器.doc Spring源代码解析2:IoC容器在Web容器中的启动.doc Spring源代码解析3:Spring JDBC .doc Spring源代码解析4:Spring MVC .doc Spring源代码解析5:Spring AOP获取Proxy .doc Spring...

    Spring 源代码解析

    Spring源代码解析1:IOC容器;Spring源代码解析2:IoC容器在Web容器中的启动;Spring源代码解析3:Spring JDBC ;...Spring源代码解析9:Spring Acegi框架鉴权的实现 Spring源代码解析10:Spring Acegi框架授权的实现

    基于SSM框架一个比赛裁判管理系统-主要技术(SpringMVC + Spring + Mybatis+源代码+文档说明

    IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis 数据源:C3P0 日志:log4j AOP 前端框架:Hui 其他插件: Ueditor <项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,...

    spring源代码解析

    可以通过使用Spring代码声明式的指定在web应用程序启动时载入应用程序上下文(WebApplicationContext),Spring的ContextLoader是提供这样性能的类,我们可以使用 ContextLoaderServlet或者ContextLoaderListener的...

    spring源码分析

    4.Spring源代码解析(四):Spring MVC 5.Spring源代码解析(五):Spring AOP获取Proxy 6. Spring源代码解析(六):Spring声明式事务处理 7. Spring源代码解析(七):Spring AOP中对拦截器调用的实现 8. Spring...

    Spring源码学习文档,绝对值得好好研究~~

    Spring源代码解析(二):ioc容器在Web容器中的启动.doc Spring源代码分析(三):Spring JDBC.doc Spring源代码解析(四):Spring MVC.doc Spring源代码解析(五):Spring AOP获取Proxy.doc Spring源代码解析(六):...

    Spring 3.0就这么简单源代码

    本书主要介绍了Spring 3.0的核心内容,不仅讲解了Spring 3.0的基础知识,还深入讨论了Spring IoC容器、Spring AOP、使用Spring JDBC访问数据库、集成Hibernate、Spring的事务管理、Spring MVC、单元测试、敏捷开发...

    mini-spring:mini-spring是简化版的spring框架,能帮助您快速熟悉spring原型和掌握spring的核心原理。取下spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP,资源加载器,事件监听器,类型转换,容器扩展点,bean生命周期和作用域,应用多维等核心功能

    迷你弹簧关于迷你弹簧是Spring框架的简化版本,可帮助您快速熟悉Spring源代码并掌握Spring的核心原理。 提取了Spring的核心逻辑,极大地简化了代码,并完善了Spring的核心功能,例如IoC和AOP,资源加载器,事件侦听...

    spring-analysis:spring框架源代码分析。 Spring源码分析

    弹簧分析项目介绍本项目为Spring原始码分析项目,本仓库原始码来自v5.2.3版本,原始码注释仓库请查看 Netlify: ://huifer-spring-analysis.netlify.app目录Spring IoC讲义独立类分析支持支付宝微信公众号

    static-ioc:从 code.google.compstatic-ioc 自动导出

    IoC 配置文件在编译时解析并转换为适当的源代码。 IoC 配置文件使用非常广泛的 Spring 框架 XML 格式。 生成的代码不依赖于任何框架,可以轻松地将其集成到任何类型的应用程序中。 #用法示例 使用 static-ioc,...

    Java毕业设计-基于ssm框架开发的Spring大学生竞赛活动平台-附毕设源代码+说明文档.rar

    本次为大家分享的是“基于SSM框架开发的Spring大学生竞赛活动平台”的毕业设计资源包,该资源包包含了完整的毕设源代码以及详尽的说明文档,是大学生在进行SSM框架学习和Web应用开发实践时的理想选择。 这个竞赛...

    深入解析Spring架构与设计原理

    本书是国内唯一一本系统分析Spring源代码的著作,也是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔,Java开发者社区和Spring开发者社区联袂推荐。本书第1版不仅在内容上获得了读者的广泛...

    黑马程序员spring2016springday01上课笔记

    (1)aop:面向切面编程,扩展功能不是修改源代码实现 (2)ioc:控制反转, - 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new...

    Spring技术内幕:深入解析Spring架构与设计原理

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...

    二,Spring IOC以及整合

    二,Spring IOC以及整合对应源代码 Spring IOC,DI,spring整合mybatis,spring整合servlet

Global site tag (gtag.js) - Google Analytics