Spring這個三角形一共有三條邊
第一條邊: IoC
第二條邊: AOP
這兩條邊不需要多說了.
那么第三條邊是什么呢:
3. Service Abstraction
Spring使用service abstraction而不依賴于標準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導致單元測試困難的話, 就應該進行抽象封裝. 典型的例子就是: JavaMail.
2. 依賴于Spring, 可以把依賴關系控制在一個比較小的范圍之內, 只與一系列接口相關. 這種依賴簡單而明確.
3. Spring的抽象接口適用范圍廣. 而如果你綁定了JTA, 那么你如果使用的是Tomcat的話, 就還需要加一個JTA的第三方實現.
4. Spring的API是面向程序開發員的, 而不是藏在幕后的. 比如JTA就是藏在EJB之后,因此JTA的異常處理就非常麻煩.
正是這三條邊組成了一個穩定的Spring三角形.
第一條邊: IoC
第二條邊: AOP
這兩條邊不需要多說了.
那么第三條邊是什么呢:
3. Service Abstraction
Spring使用service abstraction而不依賴于標準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導致單元測試困難的話, 就應該進行抽象封裝. 典型的例子就是: JavaMail.
2. 依賴于Spring, 可以把依賴關系控制在一個比較小的范圍之內, 只與一系列接口相關. 這種依賴簡單而明確.
3. Spring的抽象接口適用范圍廣. 而如果你綁定了JTA, 那么你如果使用的是Tomcat的話, 就還需要加一個JTA的第三方實現.
4. Spring的API是面向程序開發員的, 而不是藏在幕后的. 比如JTA就是藏在EJB之后,因此JTA的異常處理就非常麻煩.
正是這三條邊組成了一個穩定的Spring三角形.