从上一篇,我知道了我们想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第一篇)
分享到:
相关推荐
《Spring框架核心源代码分析及感悟》 Spring框架作为Java企业级应用开发的基石,其强大的功能和灵活性深受开发者喜爱。深入理解Spring的核心源代码,不仅有助于我们更好地使用这个框架,还能提升我们的编程技艺和对...
Spring框架是Java开发中不可或缺的一部分,它以依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)为核心,提供了丰富的功能来简化企业级应用的开发。当我们深入理解...
pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 ...
Spring框架是Java开发中...总的来说,这份"spring框架学习源代码"涵盖了Spring框架的关键知识点,包括IOC、DI、AOP、bean管理以及与数据库和日志的集成。通过学习和实践,你可以深化对Spring的理解,提高Java开发能力。
通过阅读并分析这些源代码,开发者可以更深入地理解Spring框架的工作机制,学习如何有效地使用其特性来提高代码的可维护性和可扩展性。每个章节都会提供实际的示例,帮助开发者将理论知识转化为实践技能。对于想要...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它负责管理对象的生命周期和依赖关系。在这个示例源代码中,我们可以看到多个Java类和一个bean.xml配置文件,这些都是实现Spring IOC的关键...
Spring源代码解析(一):IOC容器 Spring源代码解析(二):IoC容器在Web容器中的启动 Spring源代码解析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy Spring源...
Spring框架的IOC(Inversion of Control,控制反转)容器是其核心组件,它负责管理和装配应用中的对象。在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 ...
虽然AOP不在本次讨论的"Spring--IOC"主题内,但它是Spring框架的另一个重要特性,它允许我们在不修改已有代码的情况下,添加横切关注点,如日志、事务管理等。 **MyEclipse5.5开发平台** MyEclipse5.5是一款基于...
Spring框架是Java开发中不可或缺的一部分,尤其在企业级应用中,其Inversion of Control(IoC)容器是其核心特性之一。IoC,也被称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理权...
"spring-demo10-注解-IOC.zip"这个压缩包文件很显然包含了关于Spring框架如何使用注解进行依赖注入的示例代码。接下来,我们将深入探讨Spring中的注解和依赖注入。 依赖注入(DI)是一种设计模式,它允许我们解耦...
对于熟悉Spring框架的开发者来说,学习BlueSky-IOC会相对容易,因为它遵循了类似的依赖注入模式,但同时也有其独特的设计和实现。通过深入了解和实践,开发者不仅可以提升个人技能,还能为团队带来更高效、更灵活的...
通过分析这个"Spring-IOC丐版"的实现,开发者可以更好地理解Spring是如何工作的,这对于深入学习Spring框架、优化自己的代码或者构建类似的轻量级容器都是非常有帮助的。同时,这也是一个很好的实践案例,可以帮助...
Spring 1.2源代码是Java开发者深入了解Spring框架工作原理的重要资源。这个版本的Spring框架在2004年发布,标志着Spring框架发展的早期阶段,它包含了许多核心特性,为现代企业级Java应用奠定了基础。在这个源代码...
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框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在本文中,我们将...
在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...
在本篇中,我们将深入探讨Spring框架的核心组件——IoC(Inversion of Control)容器,这是Spring 2.5.6版本的一部分。IoC容器是Spring框架的心脏,它负责管理对象的生命周期和依赖关系,使得开发者能够实现松耦合和...
Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在Spring中就是...