# 關於IOC ###### tags: `Java Web-IOC` 1)耦合/依賴 依賴指的是某某某離不開某某某(例如a類透過b類來造對象,a類就會依賴b類) 在軟件系統中,層與層之間是存在依賴的,我們也稱之為耦合 我們系統架構或者是設計的一個原則是:高內聚低耦合 層內部的組成應該是高度聚和,而層與層之間的關係應該是低耦合的,最理想的情況是0耦合(就是沒有耦合) 2) IOC - 控制反轉/DI - 依賴注入 IOC - 控制反轉/DI - 依賴注入 控制反轉: 1)之前在Servlet中,我們創建service對象,FruitService fruitService = new FruitServiceImpl(); 這句話如果出現在servlet中的某個方法內部,那麼這個fruitService的作用域(生命週期)應該就是這個方法級別; 如果這句話出現在servlet的類中,也就是說fruitService是一個成員變量,那麼這個fruitServlet的作用域(生命週期)應該就是這個servlet實例級別 2)之後我們在applicationContext.xml中定義了這個fruitService。然後通過解析xml,產生fruitService實例,存放在beanMap中,這一個beanMap在一個BeanFactory中 因此,我們轉移(改變)之前的service實例、dao實例等等他們的生命週期。控制權從程序員轉移到BeanFactory。這個現象稱之為"控制反轉"。 依賴注入: 1)之前我們在控制層出現代碼: FruitService fruitService = new FruitServiceImpl(); 那麼,控制層和service層存在耦合。 2)之後,我們將代碼修改成FruitService fruitService = null; 然後,在配置文件中配置: (class="FruitController"需要fruitService,因此就會透過ref="fruitService"找到fruitService實例,然後注入到FruitController) <bean id="fruit" class="FruitController"> <property name="fruitService" ref="fruitService"/> </bean> ![](https://i.imgur.com/Dg7Pt9u.png)