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
14public class DocumentTest {
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/**
* 客户端完全不需要关系具体的实现类是哪个
*/
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编程就可以完成调用,完全的做到了面向接口编程