2010-07-10 54 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

相关问题