Spring-IOC-DI的意义

Spring-IOC-DI的意义

通过做一个文档管理系统来展示spring-IOC-DI的意义

1、一般方式

步骤如下:

  • 1、建立一个接口Document,增加readDocument()和writeDocument()方法
  • 2、建立一个类WordDocument,实现Document接口,以及readDocument()和writeDocument()方法
  • 3、建立ExcelDocument,PDFDocument,同样实现Document接口
  • 4、做一个管理类DocumentManager
  • 5、客户端
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class DocumentTest {
    @Test
    public void test(){
    /**
    * 1、创建一个具体的文档对象
    * 2、创建DocumentManager对象
    * 3、调用read和 write方法
    */
    Document document = new WordDocument();
    DocumentManager documentManager = new DocumentManager(document);
    documentManager.read();
    documentManager.write();
    }
    }

2、用spring容器方式

步骤如下:

  • 1、建立一个接口Document,增加readDocument()和writeDocument()方法
  • 2、建立一个类WordDocument,实现Document接口,以及readDocument()和writeDocument()方法
  • 3、建立ExcelDocument,PDFDocument,同样实现Document接口
  • 4、配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean id="wordDocument" class="..."></bean>
    <bean id="excelDocument" class="..."></bean>
    <bean id="pdfDocument" class="..."></bean>
    <bean id="documentManager" class="...">
    <!-- 该属性是一个接口 -->
    <property name="document">
    <!-- 把这个对象给接口赋值 -->
    <ref bean="excelDocument"/>
    </property>
    </bean>
  • 5、客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /**
    * 客户端完全不需要关系具体的实现类是哪个
    */
    @Test
    public void test_SPring(){
    ApplicationContext context =
    new ClassPathXmlApplicationContext("applicationContext.xml");
    DocumentManager documentManager =
    (DocumentManager)context.getBean("documentManager");
    documentManager.read();
    documentManager.write();
    }

在DocumentManager中,document接口的装配过程是由spring容器来完成的,客户端根本不知道这个过程

3、结论

通过普通的方式,在客户端中暴露了实现类,只是半面向接口编程;
通过spring的方式,在客户端只需要调用documentManager的API编程就可以完成调用,完全的做到了面向接口编程