[Java] Spring框架到底是什麼?


Answers

Spring 包含正如Skaffman正確指出的 )一個MVC框架。 簡而言之,這裡是我的投入。 Spring支持服務層,Web層和業務層的分離,但它真正最擅長的是注入對象。 因此,以一個例子來解釋一下,例如下面的例子:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

現在在你的代碼中你有一個名為RoadTrip的類,如下所示

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

現在,無論何時你想要一個Trip的實例; 有時您可能需要SUV來初始化FourWheel,或者有時您可能需要Sedan。 根據具體情況確實取決於你想要什麼。

為了解決這個問題,你希望有一個工廠模式作為創建模式。 工廠返回正確的實例。 所以最終你會得到大量的膠水代碼來正確地實例化對象。 如果沒有膠水代碼,Spring會完成膠水代碼的工作。 你用XML聲明映射,並自動初始化對象。 它還為實例使用單例體系結構做了很多工作,這有助於優化內存使用。

這也被稱為控制反轉。 其他的框架是Google guice,Pico容器等。

除此之外,Spring還有驗證框架,與JDBC,iBatis和Hibernate(還有更多)協作,對DAO層提供了廣泛的支持。 對數據庫事務提供卓越的事務控制。

春天還有很多東西可以在“Pro Spring”這樣的好書中讀到。

以下網址可能也有幫助。
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework

Question

我聽到很多關於Spring ,人們都在網絡上說Spring是一個很好的Web開發框架。 Spring框架到底是什麼? 我如何將它用於我的Web-Java應用程序開發? 任何例子?




過去, Spring只是一個依賴注入框架工作,就像( GuicePicoContainer ,...)一樣,但現在它已經成為構建企業應用程序的完整解決方案。

春天的依賴注入,當然是春天的心臟仍然存在(你可以在這裡查看其他的好答案),但春天​​還有更多......

Spring現在有很多項目,每個項目都有一些子項目( http://spring.io/projects )。 當有人談到春天時,你必須找出他在說什麼春季項目 ,它只是春天的核心,這就是所謂的春天框架 ,或者它是另一個春天的項目。

一些值得一提的春季項目是:

如果您需要為應用程序指定更多指定功能,那麼您可能也會發現它:

  • 彈簧批量框架設計,使開發
    批量應用
  • Spring HATEOAS基於HATEOAS原型輕鬆創建REST API
  • 用於移動應用開發的spring mobilespring andriod
  • spring shell構建一個全功能的shell(aka命令行)應用程序
  • 春季雲春季雲數據流雲應用程序

還有一些小項目,例如spring-social-facebookhttp://projects.spring.io/spring-social-facebook/

您可以使用Spring進行Web開發,因為它具有Spring MVC模塊,該模塊是Spring MVC 框架項目的一部分。 或者你可以使用spring與其他web框架工作,如struts2




春天是三件事。

  1. Spring處理依賴注入,我建議你閱讀Martin Fowler關於依賴注入的優秀介紹。
  2. Spring所做的第二件事是以優雅的方式在應用程序中使用優秀的Java庫。 有關示例,請參閱Spring如何包裝Task Executors和Quartz Scheduler。
  3. 第三,Spring提供了大量的REST,MVC Web框架等網絡實現。 他們認為,因為您在前兩次使用Spring,也許您可以將它用於您的Web應用程序所需的一切。

問題在於Spring DI真的被深思熟慮,圍繞其他事物的包裝真的被深思熟慮,其他東西都想出來了,Spring很好地包裝了它。 MVC和REST的Spring實現以及所有其他的東西沒有做得很好(YMMV,恕我直言),但也有例外(Spring Security是da bomb)。 所以我傾向於使用Spring的DI,以及它的酷包裝,但更喜歡Web的其他東西(我喜歡Tapestry很多),REST(Jersey非常強大)等等。




我看到兩個部分:

  1. “春天到底是什麼” - >見維克托·胡戈接受的答案。
  2. “[...] Spring是一個很好的Web開發框架” - >人們說這是在談論Spring MVC。 Spring MVC是Spring的許多部分之一,它是一個使用Spring的一般特性的Web框架,就像依賴注入一樣。 這是一個非常通用的框架,因為它非常易於配置:您可以使用不同的數據庫層(Hibernate,iBatis,普通JDBC),不同的視圖層(JSP,Velocity,Freemarker ...)

請注意,您可以在不使用Spring MVC的情況下完美地在Web應用程序中使用Spring。 我會說大多數Java Web應用程序都這樣做,而使用其他Web框架,如Wicket,Struts,Seam ......




Spring在開始時就是依賴注入,然後為幾乎所有東西添加包裝王(包裝JPA實現等)。

長篇故事...... Spring preffer XML解決方案(XML腳本引擎... brrrr)的大部分部分,因此對於DI我使用Guice

良好的庫,但隨著depnedenciec的增長,例如Spring JDBC(可能是一個具有真實名稱參數的Java jdbc解決方案)接下來是maven 4-5。

使用Spring MVC(“大春天”的一部分)進行Web開發......它是“基於請求”的框架,有聖戰“請求與組件”......由你決定




在過去,我從純技術的角度思考Spring框架。

鑑於團隊合作和開發企業級Web應用程序的一些經驗 - 我認為Spring通過將其各個元素(bean) 解耦加速應用程序 (Web應用程序)的開發 。 更快的開發使其如此受歡迎。 Spring允許將構建(佈線)應用程序的職責轉移到Spring框架上。 Spring框架的依賴注入負責將單個bean連接/連接到一個工作的應用程序中。

這樣,一旦定義了bean之間的接口,開發人員就可以更專注於單個組件(bean)的開發。

這種應用程序的測試很簡單 - 主要關注的是單個bean。 他們可以很容易地解耦和嘲弄,因此單元測試是快速和高效的。

Spring框架定義了多個專門的bean,例如@Controller@Restcontroller ), @Repository@ Component來提供Web目的。 Spring和Maven一起為開發人員提供了直觀的結構。 團隊的工作非常簡單快捷,因為單個元素分開存放並可以重複使用。







優點是依賴注入(DI) 。 這意味著外包創建對象的任務。讓我用一個例子來解釋。

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

現在在我的代碼中,我有一個類LunchDecide,如下所示:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

在上面的課堂中,根據我們的情緒,我們選擇Buffet()或Plated()。 然而這個系統緊密耦合。 每次我們需要不同類型的對象時,我們都需要更改代碼。 在這種情況下,註釋掉一行! 想像一下,50個不同的人使用了50個不同的類。 這將是一個混亂的地獄。 在這種情況下,我們需要將系統解耦。 我們來重寫LunchDecide類。

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

請注意,不是使用new關鍵字創建對象,而是將對Lunch Type的對象的引用作為參數傳遞給我們的構造函數。 這裡,對象創建是外包的。 此代碼可以使用Xml配置文件(傳統)或Java註釋(現代)進行連線。 無論哪種方式,在運行期間都會在那裡完成關於將創建哪種類型的對象的決定。 一個對象將被Xml注入到我們的代碼中 - 我們的代碼依賴於該作業的Xml。 因此,依賴注入(DI)。 DI不僅有助於使我們的系統鬆散耦合,它簡化了單元測試的編寫,因為它允許依賴被嘲弄。 最後但並非最不重要的是,DI簡化了面向方面編程(AOP),從而進一步解耦和增加模塊性。 還要注意,上面的DI是構造器注入。 DI也可以通過Setter Injection來完成 - 與封裝相同的普通舊setter方法。