Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

spring

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:

Student.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

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

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 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.

like image 418
Kriz Avatar asked Feb 07 '23 20:02

Kriz


1 Answers

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

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

like image 142
Jason Avatar answered Feb 15 '23 08:02

Jason