您的位置:首页 > 编程语言 > Java开发

spring的IoC容器解析

2012-06-24 22:50 316 查看
控制反转(IoC=InversionofControl)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。由spring来负责控制对象的生命周期和对象间的关系。
所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
DI(DependencyInjection)依赖注入,IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(DependencyInjection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的,而依赖注入(DI)是通过反射来实现的。

publicstaticvoidmain(String[]args){
ApplicationContextcontext=newFileSystemXmlApplicationContext(
"applicationContext.xml");
Animalanimal=(Animal)context.getBean("animal");
animal.say();
}

//这段代码你一定很熟悉吧,不过还是让我们分析一下它吧,首先是applicationContext.xml
<beanid="animal"class="phz.springframework.test.Cat">
<propertyname="name"value="kitty"/>
</bean>

//他有一个类phz.springframework.test.Cat
publicclassCatimplementsAnimal{
privateStringname;
publicvoidsay(){
System.out.println("Iam"+name+"!");
}
publicvoidsetName(Stringname){
this.name=name;
}
}

//实现了phz.springframework.test.Animal接口
publicinterfaceAnimal{
publicvoidsay();
}
//很明显上面的代码输出Iamkitty!


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: