Spring控制器中的BeanCreationException

时间:2014-02-03 06:11:10

标签: java spring spring-bean

我在Spring控制器中使用了org.springframework.beans.factory.BeanCreationException,因为我使用了ResponseList bean。

Error creating bean with name 'responseList' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: 1 constructor arguments specified but no matching constructor found in bean 'responseList' (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

以下是上下文部分:

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <constructor-arg type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </constructor-arg>
    </bean>

这是Bean:

package com.form.response;

import java.util.List;

public class ResponseList {

    public ResponseList() {
        // TODO Auto-generated constructor stub
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

任何人都可以纠正我在这里缺少的东西吗?

2 个答案:

答案 0 :(得分:1)

使用构造函数注入

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <constructor-arg type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </constructor-arg>
    </bean>

然后像豆一样

package com.form.response;

import java.util.List;

public class ResponseList {

    public ResponseList(List<Response> responseList) {
           this.responseList=responseList;
        // TODO Auto-generated constructor stub
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

如果设定者注射

<bean id="response" class="com.form.response.Response" scope="prototype"></bean>    
    <bean id="myController" class="com.controllers.MyController" scope="prototype">
            <property name="response" ref="response"></property>
            <property name="responseList" ref="responseList"></property>
    </bean>
    <bean id="responseList" class="carey.form.response.ResponseList">
            <property type="java.util.List">
                <list>
                   <ref bean="response"/>
                </list>
            </property>
    </bean>

然后像豆一样

public class ResponseList {

    public ResponseList() {
    }

    private List<Response> responseList;

    public List<Response> getResponseList() {
        return responseList;
    }

    public void setResponseList(List<Response> responseList) {
        this.responseList = responseList;
    }

}

答案 1 :(得分:1)

例外情况Error creating bean with name 'responseList' defined in ServletContext resource, Spring没有在ResponseList bean中获得参数化的构造函数。

<bean id="responseList" class="carey.form.response.ResponseList">
        <constructor-arg type="java.util.List">
            <list>
               <ref bean="response"/>
            </list>
        </constructor-arg>
</bean>

public ResponseList() {
    // TODO Auto-generated constructor stub
}

public ResponseList(List<Response> responseList){
    this.responseList = responseList;
}