一、IOC底層實作原理
架構 = 解析 + 反射 + 工廠
XML解析
XML配置檔案,配置建立的對象
工廠模式
原始的方式是在
UserService
中
new
一個
UserDAO
的對象,然後調用對象中的方法,這樣使得兩個類的耦合度很高。

而工廠模式将
new
一個
UserDao
通過
UserFactory
工廠類來實作,降低了
UserService
和
UserDao
之間的耦合度,但還是存在耦合的問題,是以需要進一步降低耦合度。
反射
通過XML解析,然後利用反射建立檔案
IOC整個過程
第一步:xml配置檔案,配置建立的對象
<!--配置User對象建立-->
<bean id="Dao" class="spring5.UserDao"></bean>
第二步:建立工廠類,通過解析xml配置檔案和反射實作。
Service
類通過工廠類調用
Dao
類
public class UserFactory {
public static UserDao getDao(){
String classValue = class屬性值; //xml解析
Class clazz = Class.forName(classValue);//通過反射建立對象
return (UserDao) clazz.newInstance();
}
}
二、IOC( BeanFactory
接口)
BeanFactory
IOC思想基于IOC容器完成,IOC容器底層就是對象工廠。
Spring提供IOC容器實作兩種方式:
-
接口:IOC容器基本實作,是Spring内部的使用接口,不提供開發人員進行使用。加載配置檔案時候不會建立對象,在擷取對象(使用)才去建立對象。BeanFactory
-
接口:是ApplicationContext
接口的子接口,提供更多更強大的功能,一般由開發人員進行使用。加載配置檔案時候就會把在配置檔案對象進行建立。BeanFactory
ApplicationContext
接口有兩個實作類
ApplicationContext context = new ClassPathXmlApplicationContext("userBean.xml");
ApplicationContext context1 = new FileSystemXmlApplicationContext("D:\\Java\\workspace_idea\\Spring5_demo1\\src\\userBean.xml");