初識Spring

一、程序的耦合和解耦

1.1 什麼是程序的耦合

  耦合是對模塊間關聯程度的度量,是影響軟件複雜程度和設計質量的一個重要因素,在設計上咱們應採用如下原則:若是模塊間必須 存在耦合,就儘可能使用數據耦合,少用控制耦合,限制公共耦合的範圍,儘可能避免使用內容耦合。java

1.2 程序耦合的具體案例

  依賴關係是必然存在的,是不可能完全消除的,咱們能作的只有儘可能下降依賴,有些依賴關係能夠經過優化代碼來解除的,請看下面的示例代碼:mysql

public class UserServiceImpl implements UserService {
    private UserDao userDao = new UserDaoImpl();
}

  上面的代碼表示:業務層調用持久層,而且此時業務層在依賴持久層的接口和實現類。若是此時沒有持久層實現類,編譯將不能經過。這種編譯期依賴關係,應該在咱們開發中杜絕,咱們須要優化代碼解決。spring

  再好比,咱們的JDBC操做,註冊驅動時,咱們爲何不使用DriverManager的register 方法,而是採用Class.forName的方式?sql

public class JdbcDemo {
    public static void main(String[] args) throws Exception {
        //1.註冊驅動
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲取鏈接
        //3.獲取預處理sql語句對象
        //4.獲取結果集
        //5.遍歷結果集
        //6.關閉資源鏈接
    }
}

  緣由就是咱們的類依賴了數據庫的具體驅動類(MySQL),若是這時候更換了數據庫品牌(好比 Oracle),須要修改源碼來從新數據庫驅動,這顯然不是咱們想要的。數據庫

二、解決程序耦合的思路

  拿鏈接JDBC案例來講,咱們消除類依賴的方式是經過反射來註冊驅動,從而避免了new關鍵字的使用,代碼以下:編程

//此處只是一個字符串
Class.forName("com.mysql.jdbc.Driver");

  此時的好處是,咱們的類中再也不依賴具體的驅動類,此時就算刪除MySql的驅動jar包,依然能夠編譯(運行就不要想了,沒有驅動不可能運行成功的)。 同時,也產生了一個新的問題,MySql驅動的全限定類名字符串是在java類中寫死的,一旦要改仍是要修改 源碼。 解決這個問題也很簡單,使用配置文件配置。服務器

三、工廠模式解耦

  在實際的開發過程當中,咱們會將三層對象經過key/value的形式配置在xml文件中,當服務器啓動的時候,由工廠對象讀取這個xml文件,拿到配置好的三層對象的全限定類名,而後經過反射的方式逐個建立三層對象,並存放在容器中。而這個所謂的容器其實就是一個集合。這時候有Map和List供選擇。到底選Map仍是List就看咱們有沒有查找需求。有查找需求,選Map。至此,項目中的三層對象都交由工廠來建立並由工廠存儲到容器中了,當咱們須要使用到某個對象的時候,咱們就再也不須要經過new關鍵字獲取對象了,直接共工廠裏面取出來就好了,從而避免了new關鍵字的使用,達到了下降類之間耦合性的目的。框架

四、Spring的IoC解耦

  上述的工廠模式解耦思想其實就是Spring的IoC的解耦思想。在Spring中全部的類都會在spring容器中登記,Spring幫咱們把咱們配置的對象建立好,而後Spring會在咱們須要某個對象的時候,全部的類的建立、銷燬都由Spring來控制,也就是說控制對象生存週期的再也不是引用它的對象,而是spring。測試

五、什麼是Spring

  Spring是於2003年興起的一個輕量級的Java開發框架,以 IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面編程)爲內核,提供了表示層SpringMVC和持久層SpringJDBC以及業務層事務管理等衆多的企業級應用技術,還能整合第三方框架和類庫,逐漸成爲JavaEE使用最多的應用開源框架。優化

六、Spring的發展歷程

  1. 1997年,IBM提出了EJB的思想。
  2. 1998年,SUN制定開發標準規範EJB1.0。
  3. 1999年,EJB1.1發佈。
  4. 2001年,EJB2.0發佈。
  5. 2002年,Rod Johnson發佈論文《Expert One-to-One J2EE Design and Development》,闡述了J2EE使用EJB開發設計的優勢及解決方案。
  6. 2003 年,EJB2.1發佈。
  7. 2004年,Rod Johnson 發佈論文《Expert One-to-One J2EE Development without EJB》,闡述了J2EE開發不使用EJB的解決方式(Spring 雛形)。
  8. 2006年,EJB3.0 發佈
  9. 2017,spring的最新版本spring5.0通用版發佈。

七、spring 的優點

7.1 方便解耦,簡化開發

  經過Spring提供的IoC容器,能夠將對象間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。用戶也沒必要再爲單例模式類、屬性文件解析等這些很底層的需求編寫代碼,可 以更專一於上層的應用。

7.2 聲明式事務的支持

  只須要經過配置就能夠完成對事務的管理,而無需手動編程。

7.3 聲明式事務的支持

  Spring提供面向切面編程,能夠方便的實現對程序進行權限攔截、運行監控等功能。

7.4 方便程序的測試

  Spring整合了Junit4,能夠經過註解方便的測試Spring程序。

7.5 方便集成各類優秀框架

  Spring能夠下降各類框架的使用難度,能夠方便的整合其餘優秀的框架。

7.6 方便集成各類優秀框架

  Spring對JavaEE開發中很是難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大下降。

八、spring 的體系結構

image.png

相關文章
相關標籤/搜索