---
# System prepended metadata

title: 關於IOC
tags: [Java Web-IOC]

---

# 關於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)
  