【问题标题】:Could not instantiate bean class: BeanInstantiationException无法实例化 bean 类:BeanInstantiationException
【发布时间】:2014-05-15 16:34:43
【问题描述】:

我无法摆脱错误:

  HTTP Status 500 - Request processing failed; nested exception is 
org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [[Lmain.java.com.springapp.mvc.model.DSLR;]: 
No default constructor found; 
nested exception is java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>()

我实际上在 DSLR 类中有构造函数。我的代码有什么问题?


代码在这里> Spring MVC WebApp:http://goo.gl/ddhLg5


可能导致错误的 DSLR 类:

package main.java.com.springapp.mvc.model;

import org.springframework.beans.factory.annotation.Autowired;

    public class DSLR {


    public DSLR() {
    }


    private int dslrId;
    private String model;
    private int price;
    private String description;

    public int getDslrId() {
        return dslrId;
    }

    public void setDslrId(int dslrId) {
        this.dslrId = dslrId;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "DSLR [dslr=" + dslrId + ", model=" + model
                + ", price=" + price+ ", description=" + description+"]";
    }
}

在实例化 DSLR 的 DSLRServletController 中,我进行了更改:

@ModelAttribute("dslrs") DSLR dslrs[]

改为:

@ModelAttribute("dslrs") 列出 dslrs

摆脱了先前的错误并给出了:

org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface


已解决Spring MVC web application: No default constructor found 如果有人可以在这里总结并写下答案,我很乐意接受!

【问题讨论】:

  • DSLR 的包从main.java.com.springapp.mvc.model 更改为com.springapp.mvc.model
  • 我为什么需要这样做?
  • 因为 src/main/java 是 maven 搜索要编译的类的位置,之后的任何内容都将是 actual package
  • 如果我将main.java.com.springapp.mvc.model 更改为com.springapp.mvc.model,那么我将不得不将DSLR 移动到其他目录,但我需要保持我的java 类井井有条。它与解决我的错误有什么关系?
  • @SajanChandran 这根本不是问题......

标签: java spring


【解决方案1】:

为了让某些框架以这种方式初始化对象,您必须提供 default constructor(一个不带参数的构造函数),即使它不这样做任何东西

这是因为你可能有另一个构造函数,它至少接受一个参数。从逻辑上讲,该库不知道将什么参数传递给您传递给它的每个任意类。

这在错误中指出java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.&lt;init&gt;():

  • NoSuchMethodException 表示在运行时(通过反射)找不到它期望的方法
  • .&lt;init&gt;() 指的是构造函数(构造函数技术上没有名称,因为它们始终只是类本身的名称;因此,JVM 将它们称为&lt;init&gt;())。

【讨论】:

  • 我有默认构造函数:public DSLR() {}。我在DSLR 类中没有其他构造函数。这是对的吗?如果是这样,那为什么 Spring 一直在抱怨呢?
  • @RCola 向我们展示您的代码;向我们展示引发此异常的行
  • 这是正确的,它应该可以工作,但没有看到任何代码我不能肯定地说。
  • 没有具体的行,只有一条消息说Could not instantiate bean class DSLR
【解决方案2】:

由于您与我们共享的 DSLR 类不可能出现错误,我猜您的服务器可能包含旧类。

我建议从您的 IDE 中清理项目以及 Tomcat 安装。

  • Eclipse:项目 -> 清理 ...
  • Tomcat:在 Servers 视图中右键单击服务器 -> Clean ...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2018-09-05
  • 2020-05-05
  • 1970-01-01
  • 2015-07-15
  • 2021-06-07
  • 1970-01-01
相关资源
最近更新 更多