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

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

阅读更多

在上一篇中,我们找到了doCreateBean方法,我绕了半圈才找到create bean的实际入口:

BeanWrapper instanceWrapper = null;
........
if (instanceWrapper == null) {
			//只创建Bean,但是没有注入
			instanceWrapper = createBeanInstance(beanName, mbd, args);
		}
.......
///这就是依赖注入的方法
			populateBean(beanName, mbd, instanceWrapper);
			if (exposedObject != null) {
				
				exposedObject = initializeBean(beanName, exposedObject, mbd);
			}
......
return exposedObject;

 

这里面有个BeanWrapper类型,实际上是createBeanInstance方法实例化我们get的Bean(createBeanInstance方法将创建对象的工作委托给了SimpleInstantiationStrategy类的instantiate方法,而instantiate方法调用了BeanUtils.instantiateClass(constructorToUse),下面是instantiateClass的实现:

public static <T> T instantiateClass(Constructor<T> ctor, Object... args) throws BeanInstantiationException {
....
try {
ReflectionUtils.makeAccessible(ctor);
return ctor.newInstance(args);
}
.....
}

 看到了吧?其实就是反射直接通过构造函数实例化的!

这里的BeanWrapper其实是目标Bean的包装类,具体实现是BeanWrapperImpl。我们在下来看看populateBean方法的实现,其中有这样一段代码:

if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_NAME ||
				mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_TYPE) {
			MutablePropertyValues newPvs = new MutablePropertyValues(pvs);

			// Add property values based on autowire by name if applicable.
			if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_NAME) {
				autowireByName(beanName, mbd, bw, newPvs);
			}

			// Add property values based on autowire by type if applicable.
			if (mbd.getResolvedAutowireMode() == RootBeanDefinition.AUTOWIRE_BY_TYPE) {
				autowireByType(beanName, mbd, bw, newPvs);
			}

			pvs = newPvs;
		}

 

可以看到自动装备是这里处理的(自动装配先不讲,放到最后),另外还有这句话(populateBean调用applyPropertyValues):

applyPropertyValues(beanName, mbd, bw, pvs)

 

进到这个方法一看,它调用了BeanWrapperImpl的setPropertyValues来将根据BeanDedinition中记录的Property中的有关value和ref的值或者对象注入到目标对象中去.下一篇就是BeanWrapperImpl的实现!依赖注入的核心。

 

1
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 &lt;项目介绍&gt; 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,...

    spring源代码解析

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

    spring源码分析

    3.Spring源代码解析(三):Spring JDBC 4.Spring源代码解析(四):Spring MVC 5.Spring源代码解析(五):Spring AOP获取Proxy 6. Spring源代码解析(六):Spring声明式事务处理 7. 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...

    SPRING3技术内幕

    你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码中一窥Java语言的精髓。此外,《Spring技术内幕:深入解析Spring架构与设计原理》还展示了阅读源代码的卓越方法,不仅授你以鱼...

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

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

Global site tag (gtag.js) - Google Analytics