接触Spring框架也比较久了,用的做多的自然是IOC(控制反转),IOC作为Spring中的核心技术之一到底有什么好处呢???作为菜鸟的我,在使用IOC时最大的一个感触就是,使用它可以实现完全的面向接口编程。为什么????还是让例子来说话。
首先来看一下再不用IOC的时候,如何实现接口编程的的。
public interface Office{
public void show();
}
public class Word implements Office{
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("I'm word");
}
}
public class Pdf implements Office{
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("I'm Pdf");
}
}
public class Excel implements Office{
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("I'm Excel");
}
}
public class Test {
private Office office = null;
public void setOffice(Office office){
this.office = office;
}
public Test(){
}
public Test(Office office){//参数
this.office = office;
}
public void getOffice(){
office.show();
}
public static void main(String [] args){
Test t = new Test(new Word());
t.getOffice();
}
}
输出结果为:I'm word
这是我们平常使用的接口编程,在一定程度上可以实现松耦合。但是上面的例子会出现问题,就是但我们相拥Pdf的时候必须要修改传入参数为new Pdf();这种修改代码的方式,显然没有实现完全的面向接口。
但是使用的IOC我们就可是实现完全的面向接口。
还是上面的例子我们配置Application.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="Test" class="src.Test">
<property name="office" ref="word"/>
</bean>
<bean id="word" class="stc.word"></bean>
</beans>
然后我们的main方法就可以这样写:
public static void main(String [] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Test t = (Test)context.getBean("Test");
t.getOffice();
}
这就实现的真正的解耦,我们无法通过以上代码得知到底是运行的Word还是Pdf,当我们需要变化的时候,只需要修改配置文件就可以了,不需要修改原代码!!!!