java 无法解决匹配的构造函数。 Spring 依赖注入的歧义问题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/37648984/
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-11-03 02:40:27  来源:igfitidea点击:

Could not resolve matching constructor.Ambiguity issue with Spring dependency injection

javaspring

提问by Kriz

I am getting the error "Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)" while executing my spring program. I am new to Spring core and trying to learn the framework. Below is the code:

Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)在执行我的 spring 程序时收到错误“ ”。我是 Spring 核心的新手,正在尝试学习该框架。下面是代码:

Student.java

学生.java

package com.inject.test;

public class Student {

    private String name;
    private String className;
    private Address address;



    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }


}

Address.java

地址.java

package com.inject.test;

public class Address {

    private String city;
    private String state;




    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }

}

Test.java

测试.java

package com.inject.test;

    import org.springframework.context.ApplicationContext; 
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class Test {

        public static void main(String[] args) {

            @SuppressWarnings("resource")
            ApplicationContext context =  new ClassPathXmlApplicationContext("file:com/applicationContext.xml");
            Student student = (Student) context.getBean("student");

            System.out.println("Name: " + student.getName());
            System.out.println("Class: " + student.getClassName());

            Address studentAddress = student.getAddress();


            System.out.println("Student Address: ");
            System.out.println("City: " + studentAddress.getCity());
            System.out.println("State: " + studentAddress.getState());      
        }

    }

applicationContext.xml

应用上下文.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">

   <bean id="student" class="com.inject.test.Student">
       <property name="name" value="Jai"/>
       <property name="className" value="MCA"/>
       <constructor-arg ref="address" type="java.lang.String"/>
   </bean>

    <bean id="address" class="com.inject.test.Address">
       <property name="city" value="Hyderabad"/>
       <property name="state" value="Telangana"/>
    </bean>

</beans>

What change should be made to resolve the constructor issue, please suggest.

应该进行哪些更改来解决构造函数问题,请提出建议。

回答by Jason

Your xml configuration specifies a constructor argument containing the address, but your Student class does not have a constructor that takes any arguments.

您的 xml 配置指定了一个包含地址的构造函数参数,但您的 Student 类没有接受任何参数的构造函数。

Either add the appropriate constructor, or change the constructor-arg to a property in the xml configuration.

添加适当的构造函数,或将构造函数参数更改为 xml 配置中的属性。