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

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

阅读更多
首先,必须先在[/size]Spring源代码中,找到IOC的入口点,也就是IOC的启动点,我们经常用Spring框架,知道ApplicationContext和BeanFactory启动的方式,有很多种,我们先排除Spring Web框架或者Struts2 框架的方式,而是寻找最简单的方式,以便能排除环境的因素而找到最纯的一个实现,而我们在使用Spring最简单的方式是:假设所有的需要配置的类都已经实现完毕,配置文件也写好,那么

ApplaictionContext context=new FileSystemXmlApplicationContextIMyObject Obj=(IMyObject)context.getBean("myObjectBeanID")



可以猜测到getBean()方法也许就是入口,那么,我就直接进入到FileSystemXmlApplicationContext类内部看一下,发现并没有getBean()的代码,之后,可以肯定是getBean()方法在其基类当中,检查类继承关系,我们可以知道是在AbstractApplicationContext这个抽象类中,接下来看看getBean()方法的代码:

public Object getBean(String name) throws BeansException { 
return getBeanFactory().getBean(name);
}

public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;

发现getBeanFactory()是一个抽象方法,看来是AbstractApplicationContext某个子类实现的,但是一定不是FileSystemXmlApplicationContext类,那么就需要从AbstractApplicationContext到FileSystemXmlApplicationContext之间的ApplicationContext类中查找一下了,经过查找就是AbstractRefreshableApplicationContext类,我看一下它实现的getBeanFactory()方法:
@Override public final ConfigurableListableBeanFactory getBeanFactory() { 
     .....
     return this.beanFactory; 
} }



原来就是直接返回一个beanFactory的属性(getter),那个这个属性是谁初始化的哪,继续看看这个类的其他代码,发现refresh方法(请参考我有关BeanDefinition解析,加载和注册的文章)所调用的refreshBeanFactory()方法有这样两句话:

DefaultListableBeanFactory beanFactory = createBeanFactory();	
....
synchronized (this.beanFactoryMonitor) {
this.beanFactory = beanFactory;
}


而refresh方法是最终的FileSystemXmlApplicationContext构造函数中调用的,也就是说这个beanFactory早就在实例化Context时就创建了,好了!问题就集中在这个DefaultListableBeanFactory类了,从上面的分析可以看到,getBean()的能力是来自于这个beanFactory的,我就想马上进入这个beanFactory的内部一探究竟,但是我在想我原来用过不少spring的beanFactory,很少直接用到DefaultListableBeanFactory,难道是beanFactory继承体系中的一个,按F4键,发现确实如此,原来ApplicationContext把创建对象和依赖注入的实现委托给了BeanFactory!下一篇我们重点分析BeanFactory,这是整个IOC的实现的核心。但是为什么这么实现,我们可以这样看,ApplicationContext是对BeanFactory的增强。
1
0
分享到:
评论

相关推荐

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

    《Spring框架核心源代码分析及感悟》 Spring框架作为Java企业级应用开发的基石,其强大的功能和灵活性深受开发者喜爱。深入理解Spring的核心源代码,不仅有助于我们更好地使用这个框架,还能提升我们的编程技艺和对...

    Spring框架核心源代码的分析及其感受.pdf

    Spring框架是Java开发中不可或缺的一部分,它以依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)为核心,提供了丰富的功能来简化企业级应用的开发。当我们深入理解...

    springIOC核心组件分析.vsdx

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

    spring核心技术源代码spring核心技术源代码1-9章

    通过阅读并分析这些源代码,开发者可以更深入地理解Spring框架的工作机制,学习如何有效地使用其特性来提高代码的可维护性和可扩展性。每个章节都会提供实际的示例,帮助开发者将理论知识转化为实践技能。对于想要...

    spring框架学习源代码

    Spring框架是Java开发中...总的来说,这份"spring框架学习源代码"涵盖了Spring框架的关键知识点,包括IOC、DI、AOP、bean管理以及与数据库和日志的集成。通过学习和实践,你可以深化对Spring的理解,提高Java开发能力。

    SpringIOC示例源代码

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它负责管理对象的生命周期和依赖关系。在这个示例源代码中,我们可以看到多个Java类和一个bean.xml配置文件,这些都是实现Spring IOC的关键...

    Spring源代码解析

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

    Spring源代码解析(一):IOC容器.doc

    Spring框架的IOC(Inversion of Control,控制反转)容器是其核心组件,它负责管理和装配应用中的对象。在Spring源代码解析的第一部分,我们将聚焦于IOC容器,特别是BeanFactory接口,它是所有Spring容器的基础。 ...

    Spring--IOC

    虽然AOP不在本次讨论的"Spring--IOC"主题内,但它是Spring框架的另一个重要特性,它允许我们在不修改已有代码的情况下,添加横切关注点,如日志、事务管理等。 **MyEclipse5.5开发平台** MyEclipse5.5是一款基于...

    Spring-IOC实例

    Spring框架是Java开发中不可或缺的一部分,尤其在企业级应用中,其Inversion of Control(IoC)容器是其核心特性之一。IoC,也被称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理权...

    spring-demo10-注解-IOC.zip

    "spring-demo10-注解-IOC.zip"这个压缩包文件很显然包含了关于Spring框架如何使用注解进行依赖注入的示例代码。接下来,我们将深入探讨Spring中的注解和依赖注入。 依赖注入(DI)是一种设计模式,它允许我们解耦...

    BlueSky-IOC

    对于熟悉Spring框架的开发者来说,学习BlueSky-IOC会相对容易,因为它遵循了类似的依赖注入模式,但同时也有其独特的设计和实现。通过深入了解和实践,开发者不仅可以提升个人技能,还能为团队带来更高效、更灵活的...

    Spring-IOC丐版

    通过分析这个"Spring-IOC丐版"的实现,开发者可以更好地理解Spring是如何工作的,这对于深入学习Spring框架、优化自己的代码或者构建类似的轻量级容器都是非常有帮助的。同时,这也是一个很好的实践案例,可以帮助...

    spring 1.2源代码

    Spring 1.2源代码是Java开发者深入了解Spring框架工作原理的重要资源。这个版本的Spring框架在2004年发布,标志着Spring框架发展的早期阶段,它包含了许多核心特性,为现代企业级Java应用奠定了基础。在这个源代码...

    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 框架核心 代码

    1. **控制反转(IoC)**:IoC是Spring框架的核心理念,它将对象的创建和管理权交给了容器,而不是由对象自身负责。这样可以降低对象之间的耦合度,提高代码的可测试性和可维护性。在Spring中,可以通过XML配置或注解...

    Spring IoC简单示例-注解配置-Maven构建

    在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...

    Spring2.5.6源代码分析(一):IOC容器

    在本篇中,我们将深入探讨Spring框架的核心组件——IoC(Inversion of Control)容器,这是Spring 2.5.6版本的一部分。IoC容器是Spring框架的心脏,它负责管理对象的生命周期和依赖关系,使得开发者能够实现松耦合和...

    Spring.net二----初探IOC容器.rar源代码

    Spring.NET是中国开源社区基于.NET Framework实现的一个轻量级企业级应用框架,它是对Java平台上的Spring框架的.NET版本。在本教程中,我们将深入探讨Spring.NET中的重要组件——IOC(Inversion of Control,控制...

    Spring IoC简单示例-XML配置-Maven构建

    Spring框架的核心特性之一是Inversion of Control(IoC),也被称为依赖注入(Dependency Injection)。IoC是一种设计模式,它将对象之间的依赖关系从代码中解耦出来,转交给一个外部容器(在Spring中就是...

Global site tag (gtag.js) - Google Analytics