`
longzhun
  • 浏览: 371639 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写个简单的IOC容器

 
阅读更多



 第一次看spring的时候,会感觉IOC好神奇阿。不需要设置值,用的时候取就可以了。那么它是怎么实现的呢?核心就是IOC容器。那么它有多神秘呢额?其实很简单,就是读取配置文件,生成对应的Bean,再将值赋给那个Bean就行了,取的时候直接用那个getBean方法去取就行了。
废话少说,我们自己来写一个简单的IOC容器,来证明其实它就是那么回事。
名字我们完全按照Spring的来,让测试起来就感觉在用Spring一样。
我们的测试例子是这样的,两个类,User和People,User里又name和age,People里又User的引用。调用People里的User里的say方法,打印。先看这两个类。
User类


 

 

没有需要废话的地方吧 ?
接着我们写个配置文件,放到src目录下。
applicationContext.xml


 和Spring的配置文件又区别吗?

然后呢,我们来写IOC,首先声明个接口!
ApplicationContex


 接着是实现。ClassPathXMLApplicationContext类。

首先是构造方法



 

就是根据文件名,从类路径下去读取那个xml文件,然后调用readXML()去读取xml文件,生成相应的Bean并赋值放到一个map里。

readXML()方法



 这个方法就是IOC核心了,这里我用的是jdom来处理xml文件的,dom4j也行,无所谓。
1.是使用的XPath来读取的xml,如果不熟可以看看资料。
2.取得定义的类,实例化并取得所有定义的方法。
3.取出所有以set开头的方法。
4.如果xml定义里面的property有name属性就赋值
5.如果没有name属性就用ref属性来链接其他 bean(可以看出,带ref一定要在要链接的bean后面,如果没有是查不到的。)

最后写个类测试一下。



 

和Spring没区别吧?看看结果吧

OK。IOC其实就是这么简单,这个只是简单的实现,要深入研究,就去看Spring的源代码吧。



  • 大小: 5.9 KB
  • 大小: 4.1 KB
  • 大小: 3.6 KB
  • 大小: 1.3 KB
  • 大小: 1.3 KB
  • 大小: 11.2 KB
  • 大小: 15.2 KB
  • 大小: 3.9 KB
分享到:
评论

相关推荐

    简单IOC容器demo

    【标题】:“简单IOC容器demo”是一个演示性的项目,它旨在教授如何构建一个基础的控制反转(IOC)容器。这个容器使用注解来实现依赖注入,这是Spring框架的核心特性之一。 【描述】:该示例项目是学习过程的产物,...

    手写一个SpringIoc容器

    本项目"手写一个SpringIoc容器"旨在模仿Spring的IOC(Inversion of Control,控制反转)功能,帮助开发者深入理解Spring的工作原理,提升对依赖注入(Dependency Injection)模式的认识。 在实现自定义的Spring IOC...

    一个简单的IOC容器实现

    本文将深入探讨一个简单的IOC容器实现,帮助我们理解DI的基本原理。 首先,理解IOC的概念至关重要。在传统的编程模式中,对象通常自行创建依赖的对象,这导致了代码之间的紧密耦合。而在IOC模式下,容器负责管理...

    IOC容器简单实现

    本篇文章将深入探讨如何使用Java实现一个简单的IOC容器。 ### 1. IOC容器的基本概念 IOC的核心思想是“依赖注入”(Dependency Injection,DI)。在传统的编程中,对象A依赖于对象B,通常在A的构造函数或者初始化...

    IoC容器的设计(利用反射、注解和工厂模式实现)

    1. 利用注解、反射和工厂模式设计一个简单的IoC容器 2. 该IoC容器包含3个注解和一个IoC容器类(AnnotationConfigApplicationContext),其定义如下: 注解 含义 @Component 标注Bean @Autowired 标注需要被注入的...

    自己实现的ioc容器

    在IT行业中,Spring框架是Java开发中的一个关键组件,尤其在企业级应用中,它扮演着核心...这个自己实现的IoC容器可以帮助初学者建立起对依赖注入和控制反转概念的直观认识,并为理解和使用Spring框架打下坚实的基础。

    自己实现IOC容器

    当我们自己动手实现IOC容器时,可以更深入地理解其内部的工作机制。 ### 1. IOC基本原理 **控制反转**的核心思想是将对象的创建和管理权交给容器,而不是由对象自身负责。这样,对象不再需要知道依赖的具体实现,...

    手动实现一个ioc容器.zip

    标题 "手动实现一个IOC容器.zip" 提到的主题是关于如何从零开始构建自己的依赖注入(Dependency Injection,简称DI)容器,这在Java开发中尤为重要,特别是对于Spring框架的理解和学习。IOC容器是Spring的核心功能之...

    IOC容器_原理代码

    在`iocDemo`这个例子中,我们可能会看到如何用代码实现一个简单的IOC容器。这通常包括以下步骤: 1. **解析配置**:读取XML配置文件,解析出bean的定义。 2. **创建bean**:根据bean定义创建相应的对象,可以使用...

    Spring IoC容器实现的结构分析

    Spring IoC容器是Spring框架的核心,它...无论是简单的应用还是复杂的分布式系统,Spring IoC容器都能有效地支撑其运行。随着Spring版本的演进,虽然具体实现可能有所变化,但其核心设计思想和组件架构依然保持稳定。

    IoC 容器和Dependency Injection 模式

    - **PicoContainer**:PicoContainer 是一个轻量级的 IoC 容器,它的设计目标是简单易用。虽然没有 Spring 那么全面,但对于小型项目或简单的依赖管理来说已经足够。 #### 六、总结 IoC 容器和依赖注入模式是现代...

    简单模拟springIoc容器

    本教程将通过一个简单的模拟来帮助你快速理解Spring的IoC容器。 首先,我们要了解IoC的基本概念。IoC是指应用程序的控制流程由框架接管,而不是由应用程序本身控制。在传统编程中,对象会自行创建和查找依赖的对象...

    实现自己的Ioc容器

    通过阅读这篇文章,你可能会了解到如何设计和实现一个简单的IoC容器,以及如何处理各种挑战,如处理循环依赖、性能优化等。 标签“源码”表明文章可能深入到代码层面,讲解如何通过编程实现IoC容器的核心功能。而...

    自定义IOC容器

    实现一个简单的IOC容器,我们可以从以下几个步骤入手: 1. **Bean定义**:首先需要一种方式来定义Bean,这可以通过类名、属性和依赖关系来描述。可以使用一个HashMap存储这些信息,键为Bean的ID,值为Bean的定义...

    spring ioc容器部署实现

    ### Spring IoC容器部署实现详解 #### 一、Spring IoC容器概述 Spring框架的核心特性之一就是Inversion of Control(IoC),也被称为Dependency Injection(DI)。IoC容器是Spring框架的重要组成部分,它负责管理...

    基于Java反射技术实现简单IOC容器

    基于Java反射技术实现简单IOC容器 Java反射技术是Java语言中一个非常重要的技术,通过反射技术可以在运行时检查和修改类的结构和行为。IOC容器是控制反转的缩写,全称是Inverse of Control,即控制反转。它是一种...

    Spring实现一个简单的SpringIOC容器

    本文将深入探讨如何实现一个简单的Spring IOC容器,以及涉及的主要知识点。 首先,控制反转是一种设计模式,它将对象的创建和管理从对象本身转移到一个外部容器,即IOC容器。Spring的IOC容器通过读取配置文件(如...

    SpringIoC的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC的原理和源码。 详细内容见博文: 【SSH进阶之路】一步步重构容器实现Spring的IoC——从一个...

    利用反射自实现IOC容器

    在本项目中,我们通过“利用反射自实现IOC容器”来探讨如何构建一个简单的DI框架,以理解其核心概念和工作原理。 首先,我们需要了解什么是DOM4J。DOM4J是一个Java库,用于处理XML文档,它提供了丰富的API,可以...

    山寨spring_ ioc容器

    标题中的“山寨spring_ioc容器”指的是一个非官方的、模仿Spring框架实现的IoC(Inversion of Control,控制反转)容器。...对于想要深入Spring框架或者想自己动手实现IoC容器的人来说,这是一个很好的学习资源。

Global site tag (gtag.js) - Google Analytics