2013-06-19 467 views
257

我還沒有找到我能理解的Spring bean的高級定義。我經常在Grails文檔和書中看到它們,但我認爲理解它們是有益的。那麼Spring bean是什麼?他們如何使用?他們與依賴注入有關嗎?春豆是什麼?

+2

Grails構建在春季。如果您不熟悉Spring,我建議您至少閱讀一些材料,以便了解您使用的技術。 –

+14

我認爲這裏的評論受到OP在Grails文檔和書籍參考文獻中看到的同樣的問題的影響:對於已經知道他們的意思的人來說,它們很容易。我發現維基百科的文章對初學者來說更好。 – elias

+12

@MarcoForberg Spring的古老版本是谷歌最受歡迎的原因之一,是因爲人們不斷地從像SO這樣的地方鏈接到它... http://static.springsource.org/spring/docs/3.2.x/ spring-framework-reference/html/beans.html將是一個更好的開始這些日子的地方。 –

回答

137

由Spring IoC容器管理的構成應用程序主幹和 的對象稱爲bean。一個bean是一個 對象,該對象被一個 Spring IoC容器實例化,組裝和管理。使用您提供給容器的配置元數據 創建這些bean,例如,以 XML定義的形式創建。

更多瞭解豆類和範圍從SpringSource

當你創建一個bean定義,你實際上是創建的是一個 食譜創建由該bean 定義指定的類的實際實例。 bean定義是一個配方的想法很重要,因爲它意味着,就像一個類一樣,您可能會從單個配方創建多個對象實例。

可以控制不僅各種依賴和配置 值將要被插入到從一01​​特定bean定義創建的對象,而且對象的範圍從一個特定的bean定義創建 。這種方法非常強大,並且允許您靈活地選擇通過配置創建的對象的範圍,而不必在Java類級別對象的範圍 中「烘烤」。豆類可以被定義爲 部署在多個領域

+7

因此,這些是容器管理的對象,我不需要觸及,但是如果我想要訪問一個bean來調用某些方法或檢索屬性,那麼我可以「問」Spring的bean嗎? – grantmcconnaughey

+0

一個鏈接可能會有所幫助:http://www.springsource.org/spring-framework – cjstehno

+2

@grantmc是你想通過容器處理的對象,他們的創建他們的retreival等 –

90

的Spring bean的一個只是對象由Spring容器管理的情況下,即,它們被創造和框架有線和投入「袋子的對象「(容器),從那裏你可以得到他們。

「佈線」部分是什麼依賴注入的全部內容,它意味着你可以說「我會需要這個東西」,框架將遵循一些規則來爲你提供正確的實例。

有人誰不是用來春天,我覺得Wikipedia Spring's article has a nice description

中央Spring框架是其控制容器的反轉, 提供使用配置和管理Java 對象的一致方法反射。該容器負責管理特定對象的對象生命週期:創建這些對象,調用 其初始化方法,以及通過將它們連接在一起來配置這些對象。在容器創建

對象也被稱爲管理對象。通過加載XML文件或檢測配置類上的特定Java註釋來配置容器。這些 數據源包含提供創建bean所需的信息的bean定義。

對象可以通過依賴性查找依賴注入來獲得。 依賴查找是一種模式,其中調用者 向容器對象請求具有特定名稱或特定類型的對象。 依賴注入是容器 通過構造函數,屬性或工廠方法將名稱傳遞給其他對象的模式。

20

那麼你對它有部分理解。您必須根據您的需要定製豆類,並通過使用稱爲IoC(Inversion of ControlMartin Fowler,也稱爲Dependency Injection(DI)的方法(通常稱爲IoC)通知Spring容器在需要時進行管理。

以某種方式連接bean,以便您不必關心實例化或評估對bean的任何依賴關係。這通常被稱爲Hollywood Principle

谷歌是探索更多的最佳工具,除了在這個問題上你會被淹沒的鏈接之外。 :)

2

在Spring中,構成應用程序主幹和由Spring IoC 容器管理的那些對象稱爲bean。一個bean只是一個被實例化,組裝或以其他方式由Spring IoC容器管理的對象;

7

Spring有IoC容器,它帶有Bean的Bag;創建維護和刪除是Spring Container的職責。 我們可以通過佈線和自動佈線將豆放入彈簧。 接線意味着我們手動將其配置到XML文件中,並且「自動佈線」意味着我們將註釋放入Java文件中,然後Spring會自動掃描其中的java配置文件的根上下文,並將其放入Spring的包中。

Here is the detail URI where you got more information about Beans

7

豆類是在春天的核心。它們是Spring實例化和管理的標準Java對象。

豆類大多用於:

  • 配置Spring以某種方式(數據庫連接參數,安全性等)使用
  • 避免硬編碼的依賴性依賴注入,使我們的類仍然在自我-contained和單元測試
4
  • Spring bean的只是對象由管理實例Spring IOC容器。

  • 彈簧IOC容器攜帶豆袋。Bean的創建,維護和刪除是Spring Container的職責。

  • 我們可以通過接線和自動佈線把豆到春天。

  • 接線意味着我們手動將其配置到XML文件中。

  • 自動佈線意味着我們把註釋放在Java文件中,然後Spring會自動掃描java配置文件的根上下文,並將其放入Spring的包中。

3

Spring bean是類。相反(使用new)實例化一個類的,你會得到一個實例鑄態,從應用程序上下文,其中bean是在應用程序上下文配置配置你的類的類型bean。這樣,整個應用程序就可以維護整個應用程序中的單例範圍實例。在應用程序上下文被實例化後,所有的bean都按照它們的配置順序進行初始化。如果您的應用程序中沒有獲取任何bean,則會發生事件,所有bean實例在您創建應用程序上下文之後已經創建。

17

的Java Bean

一個Java Bean是,應遵循以下約定的Java類:

  • 它應該有一個無參數的構造函數。
  • 它應該是可串行化的。
  • 它應該提供方法來設置和獲取 特性,被稱爲getter和setter方法的值。

讓理解的Spring bean

的Spring bean

的Spring bean是沒有什麼特別的,在Spring框架的任何對象,我們通過Spring容器初始化被稱爲春豆。任何普通的Java POJO類都可以是Spring Bean,如果它被配置爲通過提供配置元數據信息通過容器進行初始化。

簡單的bean

public class Triangle { 
    private String name; //private member variable 

    public Triangle() { // It should have a no-arg constructor 

    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public void sayHello(){ 
     System.err.println(getName() + " hello"); 
    } 
    } 

IOC容器通過元數據管理bean的生命週期(spring.xml)文件

我spring.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
"http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
<bean id ="t" class= "com.ved.spring.springmaven.Triangle"> 
<property name="name" value="ved prakash"></property> 
</bean> 
</beans> 

我想以最簡單的方式來證明

1

對於Spring,所有的對象都是豆子!在Spring框架 的基本步驟是

定義對象作爲豆。豆只是對象實例 這將是

春天框架通過查看他們的類定義創建。 這些定義

基本上形成配置元數據。該框架然後創建 一個計劃,該計劃

對象需要被實例化,這依賴需要設置和 注入時,新創建的實例的

範圍等,在此基礎上配置 元數據。

元數據可以在一個簡單的XML文件中提供,就像在

第一章。另外,可以提供元數據爲

註釋或Java配置。

書:只是春天