對IOC AOP的個人理解

(1) ioc,意思是Inversion of control,(反轉控制),控制反轉,就是交換控制權的意思。現在一般不使用這個詞,一般使用dependency injection(依賴注入)。依賴注入就是將依賴 注入進去。
(2)這麼來說吧,在一個動作或者事件中,比如說,你現在想寫字(Action),那麼你需要筆,於是乎,你new了一個筆來寫字,這裏,你用了new筆,你這個動作和筆有了關聯,沒了筆,你就寫不了字,也就是說,你的這個行爲依賴於筆了,他們就構成了依賴關係。或者你現在想組裝一臺電腦(Transaction),那麼你就需要顯示器、主板、鍵鼠光驅等對象,這些對象通常是new出來的,new出來的對象和當前(this)對象就有了依賴關係。

spring中對依賴的對象採用注入,這就是常說的依賴注入吧

(3)反轉控制嘛
給你個簡單的例子:
1、未用IOC:一個人揹着一大包炸藥去炸敵人的一座碉堡
2、採用IOC:這個人什麼都不帶跑到敵人碉堡下,然後打電話給總部說,把炸藥給我扔過來。

 

(4)ssh框架,是目前較爲流行的框架之一。有時根據項目需要,可能只用到了struts和hibernate。有時可能是spring。
首先理解三個獨立框架的功能。struts的目的,主要是請求和相應的分發跳轉。頁面數據的採集獲得。hibernate主要針對於DB層的交互。DB的連接、對持久化對象的操作等。spring核心內容應該是IOC。理解它的控制反轉和AOP(面向切面)

(5)所謂IoC,簡單理解就是把原本應該我們去new對象這個操作轉到spring容器去執行。
而且IoC核心其實就是一個工廠模式,而工廠模式就是製造(new)對象的,工廠模式中,一般都是利用反射來new具體的對象,然後返回實例。
(6)

IOC,控制反轉這樣理解
舉個簡單的例子
一個人要去砍柴。那麼絕大部分時候,我們會這樣設計程序
class Axe
{
   //一些字段或方法
}
class person
{
    private Axe axe = new Axe();        //自己製造斧頭
    public void cut(Axe axe)
    {
        axe.cut();
    }
}
即是,我們要去砍柴,我們要自己製造斧頭。
而IOC的意思就是我們需要斧頭,這時候斧頭就已經制造好了,我們去取就可以,不用自己製造.

class person
{
    private Axe axe = springFactory.getBean("axe");
    public void cut(Axe axe)
    {
        axe.cut();
    }
}
這些axe就是在spring的配置文件裏聲明的bean.

IOC和控制反轉是一個意思
(7)<bean id="ss" class="A">
    <property name="dao">
        <ref bean="dbdao" />
    </property
</bean>

個人理解:以上就是ioc的核心,意思是在此創建dbdao的對象,此對象在類A中使用,在類A中使用時候,用地名字是ss。通過getbean(ss)來獲取對象。

(8)我來給你個簡單明瞭的解釋。
    控制反轉又成爲依賴注入,主要爲了降低類之間的耦合度,類A依賴類B的時候我們按傳統寫法就需要在類A裏面調用類B對象的方法,而用SPRING的話,就相當於提供了一個接口,在類A裏面調用這個接口就可以得到類B對象,不用NEW出類B的對象來。利用接口的原理來降低了耦合度(如果你熟習接口的設計和使用就會很清楚)。
    而爲了實現上述原理,我們把他寫成配置文件,然後在程序運行時用反射的方式來加載這個配置文件(用spring時就是用的反射機制運行時調用),找到要使用的類,並由spring給你生成對象。這樣就OK了。
    最後在總結下這兩個名詞。控制反轉,就是交換控制權的意思,比如我類A需要用到類B的時候,具體的實現方式是在類B的某個方法裏,也就是說類B控制着這個業務的具體實現。而現在用IOC以後,類B交出控制權,類A來進行控制,類A裏只需要調用一個接口的方法,不管你這個方法的具體實現是由類B的對象來實現,還是由其他類的對象來實現,反正類A調用這個接口的這個方法就可以搞定他需要實現的業務內容,這樣一來,類A它看上去就得到了實現某個業務的控制權。而依賴注入這個詞則體現得更加專業一點,就是講在我的程序裏,我從來不去構造(new HelloWorld()這樣的方法)任何對象,只是在需要用到(也就是依賴)某個對象的時候,我就用spring給他注入這個對象。這個注入的方式也就降低了程序的耦合度
(9)

AOP面向切面編程 將程序中的交叉業務邏輯(比如安全,日誌,事務等),封裝成一個切面,然後注入到目標對象(具體業務邏輯)中去。 比如: 很多方法可能會拋異常,你要記錄這個異常到日誌中去,可以寫個攔截器類,在這個類中記錄日誌,在spring.xml中配置一個對這些要記錄日誌的方法的aop攔截器 在這個方法執行後調用這個攔截器,記錄日誌。這樣就不用每次拋異常都要手動記錄日誌。 spring的事務管理用到的就是aop 這樣也可以提高程序的內聚性。
(10)
aop叫aspect oriented program,面向切面的編程 ioc是invert of control,反轉控制 在spring in action那本書裏有詳細闡述,簡單說一下,ioc就是其實就是依賴注入,即用接口編程,在程序中不出現new關鍵字,而是用接口來命名引用,然後通過某種方式(多數用spring,不過Google guice也是很好的ioc框架)把接口的某個實現類的實例注入到引用裏,從而實現與接口具體實現類的鬆耦合 aop方式就理解起來就簡單了,其方式很類似j2ee中的filter,就是在程序正常的業務流中間像切面一樣插入很多其他需要執行的代碼,比如登陸時候在進入登錄頁面前寫入日誌,登錄以後查看cookie等類似的操作,很常用的,尤其是跟數據庫有關的,或者跟支付有關的程序肯定會在每一步前面插入日誌,還有某些國際化項目會在每次跳轉時候都轉換字符集之類
(11)我給你來個權威的,你答到這下面就基本不問了。 IOC(反轉控制):對成員變量的賦值的控制權從代碼中反轉到配置文件中。 AOP:Aspect(切面) Oriented(面向) Programming(編程),面向切面編程。  IOC 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章