2010-07-10 60 views
5

我開始學習從春春參考3.0,我想嘗試如何實例內部bean:如果不使用Spring構建Innerbean - BeanInstantiationException沒有默認構造函數發現

這裏是我的代碼:

package com.springexample; 

public class ExampleBean { 

private String samplePropertyExampleBean; 

public void setSamplePropertyExampleBean(String samplePropertyExampleBean) { 
    this.samplePropertyExampleBean = samplePropertyExampleBean; 
} 

public String getSamplePropertyExampleBean() { 
    return samplePropertyExampleBean; 
} 

class InnerBean{ 

    private String sampleProperty; 

    public void setSampleProperty(String sampleProperty) { 
    this.sampleProperty = sampleProperty; 
    } 

    public String getSampleProperty() { 
    return sampleProperty; 
    } 

} 


} 

我的配置文件是:

當我試圖找回bean InnerBean我收到以下錯誤:

線程「main」中的異常org.springframework.beans.factory.BeanCreationException:在類路徑資源[spring-config.xml]中定義的名稱爲'InnerBean'的bean創建時出錯: bean的實例化失敗;嵌套異常是org.springframework.beans.BeanInstantiationException:無法實例化bean類[com.springexample.ExampleBean $ InnerBean]:找不到默認構造函數;嵌套異常是java.lang.NoSuchMethodException:com.springexample.ExampleBean $ InnerBean。()

可能是什麼問題?我試圖在InnerBean中添加無參數的構造函數,但仍然出錯。

任何人都可以幫助我嗎?

回答

21

這是Java的一個警告 - 內部類默認構造函數不是無參數構造函數。他們的默認構造函數需要1個參數 - 外部類。

所以,使用<constructor-arg>傳遞類型ExampleBean

當然的豆,使用非靜態內部類僅當此是必要的。如果該課程只是您所展示的課程,請將其製作成static。或將其移至新文件。那麼你將不會有上述限制。首選靜態內部類不僅適用於Spring Bean,還適用於Java。

+0

感謝Bozho..it現在工作..感謝您的時間 – javanoob 2010-07-10 17:41:59

+1

@javanerd如果答案適合你,將其標記爲已接受(在投票櫃檯下面打勾) – Bozho 2010-07-10 17:48:01

+1

感謝Bozho。很好的答案。它幫助我從春天實例化一個內部線程。 – Ankit 2015-01-22 10:27:34

1

你沒有包含你的Spring XML文件,但我認爲它不重要。

它不起作用,因爲InnerBean是內部類。它不能以這種方式實例化,因爲不會包含ExampleBean的封閉實例。 (嘗試用Java做new InnerBean(),你會看到這個問題。)

如果InnerBean實例並不需要封裝的ExampleBean實例中,你可以做InnerBean靜態的。然後你將能夠使用Spring實例化它。或者,您可以使InnerBean成爲頂級(即非嵌套)類。

如果您需要了解更多關於內部類的信息,請參閱Java教程中的Nested Classes

+0

感謝理查德的鏈接..我想我需要刷我的基礎知識..感謝您的時間和鏈接 – javanoob 2010-07-10 17:41:33

相關問題