java的简单容器例子代码解析_《疯狂java实例-第14章_自己开发IoC容器》.doc

《疯狂java实例-第14章_自己开发IoC容器》.doc

第14章 自己开发IoC容器

14.1 IoC简介

在平时的开发中,当我们正在编写的某一个类需要用到另外的一个类(组件)的时候,我们都需要通过new的关键来创建该类的实例,那么有没有更好的方式,可以不在我们的代码中直接去new这个类,就可以得到该实例呢?IoC的概念很好的帮助我们解决了这个问题,当我们需要在一个类中使用另外的类时,可以通过一些配置来得到该类的实现。IoC是Inversion of Control简称,又称控制反转,一个类需要另外一个类的实例,可以通过某个容器获得,而不在类的内部创建,得到什么样的实例,由容器去决定,而不是由该类决定。

搞清楚了控制反转的概念后,我们再来了解什么叫依赖注入。依赖注入(Dependency Injection)与控制反转是同一个概念,我们创建某个类的实例由IoC容器完成,如果该类需要使用另外的类实例,那么可以在IoC容器中向该类注入需要被调用的实例。

无论是控制反转还是依赖注入,采用这种方式来创建类的实例,可以使得我们的代码更加清晰明了,将各个类之间的依赖关系反映到IoC容器中,可以更动态、灵活和透明的管理各个对象。在J2EE领域中使用IoC的概念,可以将各个功能不同的组件统一放到IoC容器中,程序员只需要关注各个组件的实现,而不需要关注各个组件的依赖的关系。常用的IoC容器有Spring的IoC容器、webwork的IoC容器、google-guice,apache的HiveMind等。

笔者面试过一些工作了几年的程序员,这些程序员很多都说自己精通Spring,精通IoC容器,但是如果一问IoC容器是如何帮我们创建类实例的,很多都不知道如何回答。在下面章节中,我们将通过编写一个简单的IoC容器,来说明IoC容器是如何帮我们创建类的实例、如何实现依赖注入,最后并通过一个整合的例子,来说明IoC容器给我们带来什么样的好处。

14.2 使用技术简介

在本章开发IoC容器时,所涉及的技术有如下几种:

Java的反射机制

dom4j

Junit

14.2.1 Java反射简介

在Java运行时环境中,如果我们需要得到某一个类的具体信息,那么就可以使用Java的反射机制,该机制可以让我们动态的得到某个类型的属性、构造器和方法。Java的反射机制可以在运行时构造某一个类的实例,在运行时调用任意一个对象的方法。

在本章中,我们需要在运行时去动态的加载配置文件,再根据这些配置文件去创建某一个类的实现,并为这些实例设置相应的属性,因此我们需要使用Java的反射机制。

14.2.2 dom4j

dom4j是一个常用的XML解析项目,该项目是一个易用的开源项目,它应用于Java平台,支持使用Dom、SAX来解析XML文件。Dom4j的使用非常简单,只需要使用该项目所提供的解析类,就可以轻松的读取到相应的XML文件,并可以得到这些xml的相关内容。本章中我们采用了XML文件作为我们的IoC容器的配置文件,因此使用dom4j就非常的合适。

14.2.3 Junit

Junit是一个单元测试框架,供Java程序员编写单元测试。在本章中,我们每编写一个功能点,就需要对该功能进行单元测试,一来可以展示我们所编写程序的效果,二来可以保证我们的程序的质量。如果站在XP(极限编程)的角度来讲,编写测试可以让我们的代码更加健壮,更不惧任何的变更,对我们项目的发展有长远的利益。本章的重点是IoC容器,使用这个测试框架,目的是展示我们代码的效果,我们当前所使用的是Junit4。

14.3 确定配置文件内容、编写DTD

在编写IoC容器之前,我们需要编写XML文件,这些XML文件用来定义人们IoC容器的一些配置,例如声明我们需要创建哪些对象(bean),为这些对象(bean)提供名字和类名,让我们的IoC容器根据这些信息去创建相应的bean。除了定义bean的名字和类名外,还需要定义一些其他的属性,例如该bean是否为单态,是否需要延迟加载定。确定了配置文件的内容后,我们开始着手编写DTD文件。

14.3.1 声明bean

在整个IoC容器中,每一个bean代表具体的某个类,因此我们的根节点为beans,beans下有多个bean,可以让我们配置具体的某个类。XML文件的具体配置如下:

定义好了bean节点好,我们需要为bean节点指定一个名字和类名,表示这个bean所对应的名称与类型,这些我们的IoC容器得到这些配置后,就可以帮我们创建这些类的实例。具体的配置如下:

以上的bean配置表示我们在IoC容器中创建了一个myDate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值