`
longzhun
  • 浏览: 361121 次
  • 性别: 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,通过注解的方式实现注入。就0积分吧哈哈哈

    IOC容器简单实现

    一个简单的IOC容器的java实现,一个简单的IOC容器的java实现

    一个简单的IOC容器实现

    之前一直想仔细研究研究spring容器技术的原理,参考别人的实现发现比想象的要简单。

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

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

    简单模拟springIoc容器

    基于xml注册,简单模拟spring ioc容器。快速理解ioc容器

    SpringIoC的简单实现

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

    Spring实现一个简单的SpringIOC容器

    本篇文章主要介绍了Spring实现一个简单的SpringIOC容器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    极轻量级Ioc容器LightInject.zip

    极轻量级Ioc容器,扩展也不少。 简单例子:container.Register, Foo>(); var instance = container.GetInstance(); Assert.IsInstanceOfType(instance, typeof(Foo)); 标签:LightInject

    IoC容器(练手项目十四)

    使用了dom4j、Java的反射机制编写了一个简单的IoC容器. 好处是:以前所编写的一些创建实例的代码可以全部省略,可以不再关心各个实例的创建,这些创建实例的行为,全部交由给IoC容器去实现,让容器去管理各个系统中...

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

    主要介绍了基于Java反射技术实现简单IOC容器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    IOC容器Auto fac的DEMO

    基于.NET的IOC容器 Auto fac的简单设计和使用

    go-simple-ioc:Golang 的简单 IoC 容器

    简单的国际奥委会 Golang 中的简单 IoC 容器。什么是IoC? 控制反转(IoC)是一种编程原理,用于反转控制以实现松散耦合。 控件是指类具有的任何附加职责,例如应用程序的流程或对对象创建或依赖对象创建和绑定流程...

    简单手写springIOC注解模式

    简单手写的springIOC容器注解模式,仅供参考,欢迎指教。

    默认xmlIOC容器 demo-基于maven项目

    基于maven 简单模拟下xml的IOC容器-可以获取简单的bean对象-支持单例类型和原型类型

    一个简单的模仿spring的ioc实现

    简单的模仿Spring Ioc 配置文件属性只支持id class name ref,其他的没做解析

    Delphi下的轻量级IoC容器 - Elite Container (Demo 0.1版)

    相比Spring的对象容器,它提供的功能更为精简常用(如对象延迟创建、对象属性自动注入等),降低了学习的难度,并且提供了很多扩展点,你只需简单地写一个插件实现类,并在配置文件中进行简单配置,就可以让Elite ...

    container:用于Go项目的轻巧而强大的IoC容器

    绑定是将适当的抽象具体实现(实现)引入IoC容器的过程。 在此过程中,您还将确定解析类型,单例或瞬态。 在单例绑定中,容器仅提供一次实例,并为所有请求返回该实例。 在临时绑定中,容器始终为每个请求返回一个...

    Kontena:Swift 中的 IOC 容器

    Kontena (コンテナ)Swift 中的 IOC 容器服务定位器/IOC 容器的简单 Swift 实现,具有有限的 DI 功能。 适用于 Swift 和 Objective C 类。 有关如何使用 Kontena 的非常基本的示例,请查看演示项目。补充笔记如果要...

    FermiContainer:FermiContainer比最简单的IoC容器还要简单,它使每个人都可以轻松实现IoC

    FermiContainer比最简单的IoC容器还要简单,它使每个人都可以轻松实现IoC。 它支持接口注册和实现类,并通过构造函数注入自动解析容器已知的依赖关系。 不需要属性或XML配置。 最好的情况就是简单,FermiContainer...

    IOC容器 mini-container

    mini-container ioc的一个开源实现,功能简单

Global site tag (gtag.js) - Google Analytics