2014-01-15 48 views
1

我一直在學習Spring,所以我決定從here開始閱讀Spring文檔。我面臨下一個短語:Spring Framework的用途

Spring Framework是一個Java平臺,它爲開發Java應用程序提供全面的 基礎結構支持。 Spring 處理基礎架構,以便您可以專注於您的應用程序。

是什麼意思comprehensive infrastructure據我瞭解春:

  1. 幫助我們綁定整個依賴樹;
  2. 提供與不同技術\框架等的整合; (指JPA,JTA,AOP等)
  3. 提供其他服務,如Spring Social,Big Data等。

comprehensive infrastructure support是否與上述三種說法相同?

+0

不是我,我只是評論 – wheaties

回答

4

還有許多其他的事情Spring框架手柄,從您的代碼帶走,其中包括:

  • 的IoC和AOP,配置應用程序
  • JNDI
  • 事務管理抽象
  • 處理單成交/連接使用不同的技術(如JDBC和JPA)
  • 確保資源釋放(使用模板)
  • 統一事件調度
  • 提供共同的方面,比如異步方法調用和事務
  • 集成JMS,JPA,休眠,...
  • 透明遠程調用(支持不同的技術)
  • MVC的Servlet和Portlet框架
  • 輕鬆實現和使用Web服務(包括REST)
  • 緩存
  • 了很多工具,如CXF,Apache的駱駝,易於集成...

除此之外還有春季組合中的其他項目,處理其他事情,只是名稱重要的:

  • 春季安全
  • Spring集成
  • Spring Batch的
  • 春數據

更多信息: - Transaction Management Abstraction就是Spring提供統一訪問不同的事務API,例如JTA,JDBC事務,Hibernate事務,......所以你就可以開始使用Hibernate交易編碼和更改事務經理所管理的容器一個應用程序服務器不需要改變任何代碼(只需要改變配置)。

  • 當使用基於JDBC的API(並且依賴於JDBC),如Hibernate,JPA和MyBatis。 Spring可以處理每個線程的連接/事務的唯一性,所以如果你使用JDBC進行一些查詢,那麼一些使用HQL和一些使用JPQL的單個事務將全部使用單個連接/事務來執行。

  • 當涉及到資源使用JDBC打交道時,管理的事情去醜,例如工作,你應該這樣做:

    Connection connection = null; 
    PreparedStatement statement = null; 
    try { 
        connection = dataSouce.getConnection(); 
        statement = connection.prepareStatement('some query'); 
    
        statement.executeUpdate(); 
    } catch(SQLException e) { 
        throw new SomeWrapperException(e); 
    } finally { 
        try { 
        // if (statement != null) { 
        //  statement.close(); 
        // } 
         if (connection != null) { 
          connection.close(); 
         } 
        } catch (SQLException e) { 
         throw new SomeWrapperException(e); 
        } 
    } 
    

    ,你可以看到有很多的代碼行只是執行的單查詢,我也忽略了關閉Statement(如果我想要釋放,我應該多增加一些嵌套try-catch-finally塊)。

    使用Spring的JdbcTemplate,Spring handles all steps which are just for resource creation, and releasing。而且您只需編寫業務邏輯所需的代碼即可。除了JdbcTemplate之外,Spring中還有一些其他模板可用,包括JpaTemplate,HibernateTemplate,TransactionTemplate,JmsTemplate,JndiTemplate,RestTemplate,ReflectionUtils等(以及其他一些Spring Portfolio項目中的其他模板)。好消息是,大多數模板的回調是單方法接口,如果您使用的是Java 8,可以用Java 8 Labmda代替。

  • 數據訪問異常的統一層次結構是使用Spring數據訪問異常的另一個特性,模板。因此,如果使用JDBC,Hibernate ...,那麼異常情況將會相同,因此更改數據訪問層的實現不會傳播到其他層。

  • 春季可以申請方面在其容器定義的bean。其中一個方面是異步方法調用,其描述爲here

  • 您可以在不添加框架特定異常(例如RemoteException)或實現接口(如Remote)的情況下使用RMI,WebServices進行遠程處理。事實上,你的客戶端核心並不知道bean的遠程位置,並且遠程或本地是一個配置問題,更多的信息可以看到here

Spring提供了許多更多的功能,並且是影響Java EE的最重要的事情之一。實際上,通過查看Spring已經完成的工作,Java EE 5+開始變得更簡單。 欲瞭解更多信息,你應該自己挖掘文檔。

+0

你是否在第三和第四個陳述中對相同的交易進行了解釋?你能否提供更多關於'Templating','async method call'和'transparent remoting'的細節。 –

1

我會說他們指的是前兩個特別。通過綜合基礎設施,Spring文檔意味着它們提供了對Inversion of Control和其他低級實現(如JDBC)的抽象。手動將對象連接在一起,連接到數據庫,處理不必要的檢查異常等等,只是沒有趣味,並且從應用程序的實際工作中脫離出來。