SpringIOC 收藏
SpringIOC解决了组件之间的耦合问题(一个好的设计,不但要实现代码的重用,还要将组件间的关系解藕)。IOC实现组件间的关系从程序内部提升到外部容器(XML配置文件)来管理。运行期间由容器将组件间的某种依赖关系注入到组件中,控制程序间的实现交给了外部的容器来完成。即常说的好莱坞原则。
IOC(Inversion of Control) 即控制反转,这里的控制指的是,程序相关类之间的依赖关系。在Spring中创建被调用者的工作不再由调用者来完成,目的是为了更好的扩展性和良好的可维护性。
从面向对象的角度来讲,反转可以解释为"要依赖于抽象接口,而不应该依赖于实现",也就是说,考虑到程序的扩展和维护,我们的代码应该尽可能地依赖于接口,而不是依赖于具体的实现。
即,所谓的控制反转,指的是在Spring框架中,类的依赖关系的控制并不需要出现在你的代码中,被反转了,这种依赖关系的控制 反转到了Spring容器中去了。
实例如下:
首先定义个接口IClassA,在IClassA接口中,声明一个display()方法。源代码:
package org.intong.ioc;
public interface IClassA
{
public void display();
}
定义一个实现类ClassA:
package org.intong.ioc;
public class 类implements IClassA
{
public void display()
{
System.out.println("display........");
}
}
定义一个类ClassB,ClassB将直接持有一个IClassA的对象。
package org.intong.ioc;
public class ClassB{
IClassA ica;
public void setIca(IClassA ca)
{
this.ica = ca;
}
public void methodA()
{
ica.display();
}
}
在Spring配置文件applicationContext.xml文件中设定ClassB和其他类之间的依赖关系。
applicationContext.xml文件配置如下:
.......
<bean id="ca" class="org.intong.ioc.ClassA"></bean>
<bean id="cb" class="org.intong.ioc.ClassB">
<property name="ica">
<ref bean="ca"/>
</property>
</bean>
......
上例中,定义一个id为ca的节点,ca为org.intong.ioc.ClassA的对象,定义了一个cb的结点,该节点依赖于ca对象,对应地,在ClassB类中必须有一个ca的属性,并定义setter方法。
注意:每个bean的id属性都是该bean的唯一标识,程序通过id访问bean,bean与bean的依赖关系也通过id属性完成。
由上例可以看到,创建ClassA的工作不再由ClassB来完成,而是交给了Spring容器来完成。
其实说白了就是,不用new对象啦,只要把我要调用的对象在哪里,在配置文件里注明一下,自然有容器给你去创建对象了,不用你操心。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java_dujianguo/archive/2008/01/10/2033475.aspx