Spring這個三角形一共有三條邊
第一條邊: IoC
第二條邊: AOP
這兩條邊不需要多說了.
那么第三條邊是什么呢:
3. Service Abstraction
Spring使用service abstraction而不依賴于標(biāo)準(zhǔn)J2ee的API(比如: JNDI)或者其他的開源項目(比如Hibernate), 原因如下:
1. 是否依賴于特定的API取決于API的本身而不是起源(原文:Whether it's desirable to depend on a particular API depends more on the nature of that API than its provenance). 比如: 如果依賴于一個特定的API導(dǎo)致單元測試?yán)щy的話, 就應(yīng)該進(jìn)行抽象封裝. 典型的例子就是: JavaMail.
2. 依賴于Spring, 可以把依賴關(guān)系控制在一個比較小的范圍之內(nèi), 只與一系列接口相關(guān). 這種依賴簡單而明確.
3. Spring的抽象接口適用范圍廣. 而如果你綁定了JTA, 那么你如果使用的是Tomcat的話, 就還需要加一個JTA的第三方實現(xiàn).
4. Spring的API是面向程序開發(fā)員的, 而不是藏在幕后的. 比如JTA就是藏在EJB之后,因此JTA的異常處理就非常麻煩.
正是這三條邊組成了一個穩(wěn)定的Spring三角形.
第一條邊: IoC
第二條邊: AOP
這兩條邊不需要多說了.
那么第三條邊是什么呢:
3. Service Abstraction
Spring使用service abstraction而不依賴于標(biāo)準(zhǔn)J2ee的API(比如: JNDI)或者其他的開源項目(比如Hibernate), 原因如下:
1. 是否依賴于特定的API取決于API的本身而不是起源(原文:Whether it's desirable to depend on a particular API depends more on the nature of that API than its provenance). 比如: 如果依賴于一個特定的API導(dǎo)致單元測試?yán)щy的話, 就應(yīng)該進(jìn)行抽象封裝. 典型的例子就是: JavaMail.
2. 依賴于Spring, 可以把依賴關(guān)系控制在一個比較小的范圍之內(nèi), 只與一系列接口相關(guān). 這種依賴簡單而明確.
3. Spring的抽象接口適用范圍廣. 而如果你綁定了JTA, 那么你如果使用的是Tomcat的話, 就還需要加一個JTA的第三方實現(xiàn).
4. Spring的API是面向程序開發(fā)員的, 而不是藏在幕后的. 比如JTA就是藏在EJB之后,因此JTA的異常處理就非常麻煩.
正是這三條邊組成了一個穩(wěn)定的Spring三角形.