Spring IOC

来源:互联网 发布:开心消消乐数据同步 编辑:程序博客网 时间:2024/06/02 06:46

1.1 IOC的思想

IOC(Inversion Of Control, 控制反转):
控制反转是一种思想,在Java编程中,IOC就意味着将你设计好的对象交给IOC容器进行管理,而不是在你对象的内部直接控制其他的对象。

在传统的Java程序开发中,我们直接在对象内部通过new来创建一个对象,是程序主动去获取对象,使用完之后还需要将对象销毁(如connecttion),对象会和其他的类产生耦合;而spring IOC 则是容器负责创建并管理对象。例如A对象需要B对象进行协作,由spring完成创建对象B的工作,并将对象B保存到一个容器当中。当对象A需要该对象B进行协作时,spring从容器中取出对象B并交给对象A使用,对象A无需关心对象B是如何创建的、什么时候创建好的,只关心对象B能够协同工作就行。
IOC编程思想对编程带来的最大改变不是代码上的,而是思想上的“主从变换”。应用程序原本是主动的,需要什么资源都是主动出击;而在IOC编程思想中,应用程序变成被动的,由IOC容器来创建并注入所需要的资源。

例如说找女朋友的过程,在没有IOC思想的情况下,我们需要注意观察每一个妹子,然后打听她们的兴趣爱好、QQ、微信等,还要投其所好。。。。在IOC思想的情况下,那么婚介所就相关于IOC容器,婚介所保存许多妹子的相关信息,我们只需要向婚介所说明我们需要身高168、长得漂亮。。。的妹子,那么婚介所就会给我们提供这样的妹子,我们只需要去妹子聊天、约会就行。

spring倡导的开发方式就是如此,所有的类都需要在spring容器进行登记,告诉spring你是个什么东西、你需要什么东西,然后spring会在程序运行到适当的时候把你所需要的东西给你,同时也会把你交给需要你的东西。所有类的创建和销毁都是由spring负责,也就是说控制对象生命周期的不是引用它的对象,而是spring。对于某个具体对象而言,以前是它控制引用对象的生命周期,现在所有对象的生命周期都是由spring来控制,这就叫做控制反转。

它的思想就是由spring容器来负责实现依赖对象的创建、协调工作,对象本身只需要关注其业务逻辑即可。从这方法面来看,对象如何获取依赖对象的责任被反转了。
IOC是spring的核心思想。

1.2 DI依赖注入

在系统运行过程中,通过DI(Dependency Inject)动态为对象提供它所需要的对象。
spring是通过反射来实现注入的。而反射允许在程序运行时,动态地生成对象、执行对象的方法、以及改变对象的属性。

下面简单示例spring 的运行过程:

public static void main(String args[]){    ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");    Cat cat=(Cat)context.getBean("cat");    cat.getName();  }

application.xml中的内容:

    <bean id="cat" class="runner.Cat">        <property name="name" value="hello"></property>    </bean>  

Cat类:

public class Cat {    String name;    public void setName(String name){  //必须包含setter方法,因为在生层bean的过程中需要对成员变量进行初始化        this.name=name;    }    public void getName(){        System.out.println(name);    }}

上述代码便是一个简单的spring运行过程,那么如果自己实现spring的话,那么可以这样写:

 //定义一个Bean类 class Bean{    String id;    String type;    HashMap<String,Object> = new HashMap<String,Object>();}

这样,HashMap中String对应bean的id,而Object则对应存储的bean。这样,当我们调用context.getBean便根据bean id从HashMap中获取对用的bean。这只是一个简单的类比。

1.2 IOC体系结构

… 待续

参考博客:
http://blog.csdn.net/it_man/article/details/4402245
http://blog.csdn.net/qq_22654611/article/details/52606960

原创粉丝点击