2010-07-10 14 views
5

ho iniziato a imparare a molla dalla primavera di riferimento 3.0 e ho voluto provare come creare un'istanza di fagioli interno:Non riuscendo a creare Innerbean utilizzando Spring - BeanInstantiationException Nessun costruttore di default trovato

Ecco il mio codice:

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; 
    } 

} 


} 

e il mio file di configurazione è:

Quando sto cercando di recuperare il bean InnerBean ho ricevuto il seguente errore:

Eccezione nella discussione "main" org.springframework.beans.factory.BeanCreationException: errore nella creazione di bean con il nome 'InnerBean' definito nella risorsa del percorso di classe [spring-config.xml]: L'istanziazione del bean è fallita; l'eccezione annidata è org.springframework.beans.BeanInstantiationException: impossibile istanziare la classe bean [com.springexample.ExampleBean $ InnerBean]: non è stato trovato alcun costruttore predefinito; l'eccezione annidata è java.lang.NoSuchMethodException: com.springexample.ExampleBean $ InnerBean.()

Quale potrebbe essere il problema? Ho provato ad aggiungere il costruttore no-argument in InnerBean ancora sto ricevendo errore ..

Qualcuno può aiutarmi?

risposta

21

Questo è un avvertimento di Java: il costruttore di default delle classi interne non è un costruttore no-arg. Il loro costruttore predefinito prende 1 parametro di tipo - la classe esterna.

Quindi, utilizzare <constructor-arg> passare un fagiolo di tipo ExampleBean

Naturalmente, utilizzare non statici classi interne solo se ciò è necessario. Se la classe è solo ciò che hai mostrato, fallo come static. O spostalo in un nuovo file. Quindi non avrai la restrizione di cui sopra. Preferire le classi interne statiche è una buona pratica non solo per i fagioli primaverili, ma in Java in generale.

+0

Grazie Bozho..it è now..Thanks lavorando per il vostro tempo – javanoob

+1

@javanerd se la risposta più vi si addice , contrassegnalo come accettato (spunta sotto il contatore dei voti) – Bozho

+1

grazie Bozho. Bella risposta. Mi ha aiutato a creare un filo interiore dalla primavera. – Ankit

1

Non hai incluso il file XML Spring, ma non penso che importi.

Non funziona perché InnerBean è una classe interna. Non può essere istanziato in questo modo perché non ci sarebbe alcuna istanza di inclusione di ExampleBean. (Prova a fare new InnerBean() in Java e vedrete il problema.)

Se un'istanza InnerBean non ha bisogno di essere incapsulato all'interno di un ExampleBean esempio, si potrebbe fare InnerBean statica. Allora saresti in grado di istanziarlo usando Spring. Oppure potresti fare InnerBean una classe di livello superiore (cioè non annidata).

Vedere Nested Classes nelle esercitazioni Java se è necessario saperne di più sulle classi interne.

+0

Grazie Richard per la link..I che ho bisogno di rispolverare le mie basics..Thanks per ur tempo e collegamento – javanoob

Problemi correlati