2016-09-23 95 views
2

現在2個月,我決定根據MVC模式開發一個Web應用程序。Spring MVC:Spring Bean如何工作?

我來自一個嵌入式(C/C++)程序,所以我會一步一步來到Java。

到現在爲止,我正在手動完成所有應用程序開發。我將所有的Servlet都放在一個包中,我的JavaBean放在一個包中,我的(JPA)實體放在另一個包中,而DAO層放在同一個位置。到目前爲止,我瞭解我在做什麼,一切都很好。我決定使用Spring MVC(聽說這個框架很好),但是在這裏我遇到了一些關於Spring Beans概念的理解問題。

這是我的問題:

什麼是春豆? (I have already read this but it's not tell me how using it?)(對我來說,一個Bean完全是一個簡單的Java類,它尊重一些規則,但是當我看到一個Spring Bean時,它完全不同,我看到了一些Spring代碼,它們的bean返回了一個對象,爲什麼他們稱它爲Bean 「,我很困惑),所以。

Spring Beans在SpringMVC的工作流程中涉及哪些方面?

在應用程序中,我應該放置Spring Beans?

如何以及何時使用它?

我在應用程序的業務部分使用JavaBeans,例如從窗體中檢索字段,是否可以用Spring Beans做同樣的事情?由於Spring Bean的配置似乎遇到困難(因爲我無法理解背後的機制),我們可以使用Spring MVC創建一個Web應用程序,而無需使用單個Spring bean(當然,除了DispatcherServlet)嗎?

爲什麼使用SpringBean而不是Java Bean?

Spring Bean還有什麼?我知道Spring MVC不是很容易處理,有很多東西需要掌握,尤其是很多配置。

從哪裏開始?

我應該放棄使用Spring MVC?

我已經在網上搜索瞭解,但我找不到任何詳細解釋事情的東西。

謝謝。

PS:對不起,我住在法國。

+2

這個問題非常廣泛。恐怕沒有多少人會試圖回答所有這些。 –

回答

2

Lemme首先嚐試解釋Spring Framework的要點。

Spring基於控制反轉(IoC)的概念。這個概念基本上意味着函數bean在接口中表達它們的依賴關係,並且某些東西(在這種情況下是Spring)負責注入正確的實現。

例如,假設我有一個UserRepository(接口)。我有兩個實現,一個MySqlUserRepository和一個MongoDbUserRepository,因爲我的客戶可以選擇這兩種存儲技術之一。現在假設我有多個類消耗UserRepository。爲了避免他們都必須知道我們正在使用哪個impl,消費者只表示他們需要一個UserRepository(通常通過@Inject註釋),並且我利用這個框架在初始化時注入正確的。

這是Spring框架的重點。這些對象(UserRepository impl和consumer)是Spring管理的bean,或者更簡潔地說Spring Bean。 Spring管理他們的生命週期並將它們連接在一起。

Spring MVC是一個基於Spring Framework的MVC框架。這就是說你的MVC文物(控制器等)是Spring Beans。春天通常應該管理你所有的非有狀態的對象(有些情況下可能有一個不這樣做的好理由,但這超出了這個答案的範圍)。您的有狀態對象是您的非有狀態對象管理的對象。 Spring管理管理你的狀態的對象。

Spring是一個非常強大的框架,它有很多附加組件,並且java生態系統中的大多數軟件包都至少有一個關於如何使它們與Spring一起工作的教程,如果不是開箱即用的集成。

+0

感謝您使用UserRepository的示例。要開始我的項目,我會承認這個概念,並且我會盡力不將它與Java Bean進行比較。 – akuma8

4

java bean和spring-managed beans是不同的東西。 Java bean確實是一些具有特定命名約定的對象,其中spring bean不同。

什麼泉指Spring(spring managed)bean只是Spring框架生命週期管理的一個類的實例。它不必遵循Java bean的命名規則等。一個bean最直接的用法是依賴注入。您可以將這種彈簧管理的對象(bean)注入其他bean中,例如控制器。

你有幾種如何創建bean的方法。 It's nicely described in the doc

請注意,從彈簧的角度來看,即使是一個控制器也只是另一個碰巧有一些額外功能的bean。

要開始我會去一些春季啓動示例應用程序。它可以爲您節省大量配置,並且通常是很好的起點。

+0

非常感謝您的解釋,如果我很好理解您的意思,那麼Spring中的所有內容都與Java中的「SpringBean」相同,都是「對象」。所以我必須記住SpringBean與JavaBean完全不同。 – akuma8

0

爲了節省時間爲那些想知道這個問題的答案,在春季官方網站上有一個很好的解釋Spring Beanshigh-level view of how Spring works。鏈接參考版本4.3.9(最新的時間),更新的信息應該可用here

文檔說:

在Spring中,構成您的應用程序的骨幹,該對象由Spring IoC容器管理被稱爲豆。 bean是一個實例化,組裝並由Spring IoC容器管理的對象。否則,bean只是應用程序中的衆多對象之一

...

下圖是Spring工作原理的高級視圖。enter image description here

+0

經過近7個月的春季運動,事情比我發佈這個問題的日子更加清晰。當我們瞭解它的工作原理時,這是一個了不起的工具。等待下一個版本 – akuma8