Java BeanInstantiationException: 无法实例化 bean 类

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23637894/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 00:27:34  来源:igfitidea点击:

BeanInstantiationException: Could not instantiate bean class

javaspring-mvcmodel-view-controllerjavabeans

提问by J.Olufsen

I am having troubles while trying execute my Spring MVC application on Tomcat 7.

我在 Tomcat 7 上尝试执行我的 Spring MVC 应用程序时遇到了麻烦。

Here is my DSLRServletController:

这是我的DSLRServletController

 import main.java.com.springapp.mvc.dao.DSLRDAO;
    import main.java.com.springapp.mvc.model.DSLR;
    import main.java.com.springapp.mvc.pckg.DSLRForm;
    import main.java.com.springapp.mvc.pckg.DSLRValidaor;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.*;

    @Controller
    public class DSLRServletController extends HttpServlet {
        static Logger logger = Logger.getLogger(DSLRServletController.class);

        private DSLRDAO dslrDAO;

       /* request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=utf-8");
        List list = getActions(request, response);
        response.setContentType("text/html; charset=UTF-8");*/

        //@Autowired // need?
        public DSLRServletController() {
            this.dslrDAO = new DSLRDAO();
        }

        public void init() {logger.error("DSLRServlet.init(): just started"); }
        /*
                /s                                    GET
                /s?id=1                               GET
                /s?action=save                        POST
                /dslrservice?id=1&tm=<timestamp>      GET
         */
    @RequestMapping(value = "/s", method = RequestMethod.GET)
    public String showHTMLResponse(@ModelAttribute("dslrs") DSLR dslrs[],
                                   @ModelAttribute("dslr") DSLR dslr,
                                   @ModelAttribute("dslrErrors") HashMap dslrErrors,
                                   @ModelAttribute ("dslrform") DSLRForm dslrForm,
                                   @RequestParam("id") String paramId,
                                   @RequestParam("action") String paramAction,
                                   Model model){

        if(paramId == null || paramId.equals("")){
            //show_all_dslrs
            dslrs = getAllDslrs();    // DSLR adslrs[] -> to MODEL; HOW?
            //getServletConfig().getServletContext().getRequestDispatcher("/dslrs.jsp").forward(request, response);
           return "dslrs";
        }else{
            //show_this_dslr;
            HashMap<String,Object> dslrHashMap = getDSLRById(paramId);
            dslr = (DSLR) dslrHashMap.get("dslr");
            dslrForm = (DSLRForm)dslrHashMap.get("dslrForm");
            dslrErrors = (HashMap)dslrHashMap.get("dslrErrors");

                if(dslr != null){
    //                getServletConfig().getServletContext().getRequestDispatcher("/dslr.jsp").forward(request, response);
                    return "dslr";
                }

                else{
    //                getServletConfig().getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
                    return "error";
                }


        }
    }

    @RequestMapping(value = "/s", method = RequestMethod.POST)
    public String showHTMLResponsePOST(@ModelAttribute("dslrs") DSLR dslrs[],
                                   @ModelAttribute("dslrErrors") HashMap<?,?> dslrErrors,
                                   @ModelAttribute ("dslrform") DSLRForm dslrForm,

                                   @RequestParam("id") String paramId,
                                   @RequestParam("action") String paramAction,
                                   @RequestParam("dslr_model") String paramModel,
                                   @RequestParam("price") String paramPrice,
                                   @RequestParam("description") String paramDescription,
                                   Model model){
        int iStatusCode = 0;
        if(paramAction.equals("save") )
            iStatusCode = saveDSLR(paramId, paramModel, paramPrice, paramDescription, dslrErrors, dslrForm);    // POST

        return "dslrs";

    }

        private int saveDSLR(String paramId,
                             String paramModel,
                             String paramPrice,
                             String paramDescription,
                             HashMap<?,?> context_dslrErrors,
                             DSLRForm context_dslrForm
                             ) {
            int byte0 = 1;
            try {

                DSLRValidaor dslrValidaor = new DSLRValidaor();

                DSLRForm dslrForm = new DSLRForm();
                dslrForm.setDslrId(paramId);
                dslrForm.setModel(paramModel);
                dslrForm.setPrice(paramPrice);
                dslrForm.setDescription(paramDescription);

                HashMap hashmap = dslrValidaor.Validate(dslrForm);
                if(hashmap.size() > 0) {
                    context_dslrForm = dslrForm;
                    context_dslrErrors = hashmap;
                    byte0 = -1;
                } else{
                    DSLRDAO planedao = new DSLRDAO();
                    DSLR dslr = new DSLR();
                    dslr.setDslrId(Integer.parseInt(paramId));
                    dslr.setModel(paramModel);
                    dslr.setPrice(Integer.parseInt(paramPrice));
                    dslr.setDescription(paramDescription);
                    planedao.update(dslr);
                }
            }
            catch(Exception exception)
            {
                logger.error((new StringBuilder()).append("DSLRServlet.saveDSLR():").append(exception.getMessage()).toString());
                byte0 = -1;
            }
            return byte0;

        }

        private DSLR[] getAllDslrs(){
            DSLR adslrs[] = null;
            try
            {
                DSLRDAO DSLRDAO = new DSLRDAO();
                adslrs = (DSLR[])DSLRDAO.findAll();
            }
            catch(Exception exception)
            {
                logger.error((new StringBuilder()).append("PlaneServlet.getAllPlanes():").append(exception.getMessage()).toString());
            }
    //        request.setAttribute("dslrs", adslrs);
            return adslrs;
        }

        private HashMap<String, Object> getDSLRById(String s)
        {
            HashMap<String,Object> map = new HashMap<String, Object>();

            DSLR dslr = null;
            try {
                int i = Integer.parseInt(s);
                DSLRDAO DSLRDAO = new DSLRDAO();
                dslr = (DSLR)DSLRDAO.findById(i);

                DSLRForm dslrForm = new DSLRForm();
                dslrForm.setDslrId(Integer.toString(dslr.getDslrId()));
                dslrForm.setModel(dslr.getModel());
                dslrForm.setPrice(Integer.toString(dslr.getPrice()));
                dslrForm.setDescription(dslr.getDescription());


                map.put("dslr", dslr);
                map.put("dslrform", dslrForm);
                map.put("dslrErrors", new HashMap());

    //            request.setAttribute("dslrform", dslrForm);
    //            HashMap hashmap = new HashMap();
    //            request.setAttribute("dslrErrors", hashmap);
            }
            catch(Exception exception)
            {
                logger.error((new StringBuilder()).append("DSLRServlet.getDSLRById():").append(exception.getMessage()).toString());
            }
            return map;
        }
    }

DSLRServletController-servlet.xml :

DSLRServletController-servlet.xml :

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="main.java.com.springapp.mvc" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!--<bean name="/s" class="main.java.com.springapp.mvc.controller.DSLRServletController"/>-->

</beans>

DSLRDAO:

DSLRDAO:

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

import main.java.com.springapp.mvc.model.DSLR;
import main.java.com.springapp.mvc.util.DbUtil;
import org.apache.log4j.Logger;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DSLRDAO {

    Connection connection = null;
//    static Logger logger = Logger.getLogger(ttu/idu0200/db/PlaneDAO);
    public DSLRDAO() {
        connection = DbUtil.getConnection();
    }

    public DSLR[] findAll() {
//        connection = DbUtil.getConnection();
        List<DSLR> dslrs = new ArrayList<DSLR>();
        try {
            Statement statement = connection.createStatement();
            ResultSet rs = statement.executeQuery("select * from DSLR");
            while (rs.next()) {
                DSLR dslr = new DSLR();
                dslr.setDslrId(rs.getInt("dslrid"));
                dslr.setModel(rs.getString("model"));
                dslr.setPrice(rs.getInt("price"));
                dslr.setDescription(rs.getString("description"));
                dslrs.add(dslr);
            }
        } catch (SQLException exception) {
            Logger.getLogger(DSLRDAO.class).error((new StringBuilder()).append("DSLRDAO:").append(exception.getMessage()).toString());
        }finally {
//            DbUtil.close();
        }

        return dslrs.toArray(new DSLR[dslrs.size()]);
    }

    public DSLR findById(int dslrId){
//        connection = DbUtil.getConnection();
        DSLR dslr = new DSLR();

        try{
            PreparedStatement preparedStatement = connection.prepareStatement("select * from DSLR where dslrid=?");
            preparedStatement.setInt(1, dslrId);
            ResultSet resultSet = preparedStatement.executeQuery();

            if(resultSet.next()){
                dslr.setDslrId(resultSet.getInt("dslrid"));
                dslr.setModel(resultSet.getString("model"));
                dslr.setPrice(resultSet.getInt("price"));
                dslr.setDescription(resultSet.getString("description"));
            }
        } catch (SQLException exception) {
            Logger.getLogger(DSLRDAO.class).error((new StringBuilder()).append("DSLRDAO:").append(exception.getMessage()).toString());
        } finally {
//            DbUtil.close();
//            connection = null;
        }
        return dslr;
    }
    public void update(DSLR dslr){
//        connection = DbUtil.getConnection();
     try{
         PreparedStatement preparedStatement  =
                 connection.prepareStatement("update dslr set model=?, price=?, description=?" + " where dslrid=?");

         preparedStatement.setString(1, dslr.getModel());
         preparedStatement.setInt(2, dslr.getPrice());
         preparedStatement.setString(3, dslr.getDescription());
         preparedStatement.setInt(4, dslr.getDslrId());

         preparedStatement.executeUpdate();

     } catch (SQLException exception) {
         Logger.getLogger(DSLRDAO.class).error((new StringBuilder()).append("DSLRDAO:").append(exception.getMessage()).toString());
     } finally {
//        DbUtil.close();
//        connection = null;
     }

    }
}

web.xml:

网页.xml:

<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Spring MVC Application</display-name>

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


Errors:

错误:

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>()

type Exception report

message 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>()

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: 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>()
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:927)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

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>()
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:108)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:770)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:363)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.NoSuchMethodException: [Lmain.java.com.springapp.mvc.model.DSLR;.<init>()
    java.lang.Class.getConstructor0(Class.java:2810)
    java.lang.Class.getDeclaredConstructor(Class.java:2053)
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:770)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:363)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


UPADTE4:

UPADTE4:

the new DSLR classwith default constructor still returns same errors

具有默认构造函数的新DSLR 类仍然返回相同的错误

采纳答案by Sireesh Yarlagadda

It is the common exception while achieving the dependency injection in springs.

这是在 springs 中实现依赖注入时常见的异常。

In your case, you havent placed the property and ref bean in xml configuration.

在您的情况下,您还没有在 xml 配置中放置属性和引用 bean。

<bean name="s" class="main.java.com.springapp.mvc.controller.DSLRServletController"/>
<property name="dslrDAO" ref="dslrDAO" />
</bean>

@Autowired is the annotation used for it.

@Autowired 是用于它的注释。

回答by sudmong

Root cause suggests issue is with DSLR class.

根本原因表明问题出在 DSLR 类上。

[[Lmain.java.com.springapp.mvc.model.DSLR;]: No default constructor found;

[[Lmain.java.com.springapp.mvc.model.DSLR;]:未找到默认构造函数;

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>()
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:108)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveModelAttribute(HandlerMethodInvoker.java:770)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:363)