:无法解析匹配的构造函数(提示:为简单参数指定索引/类型/名称参数以避免类型歧义)

时间:2018-05-04 03:33:32

标签: spring

执行以下代码时,我遇到以下错误。

我的课程名称如下所示。

class Dad.java



package TestingDependecy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Dad {

	private Mom mom;
	private Child child;
	
	public Dad (Mom mom) {
		this.mom = mom;
	}
	
	public Dad (Child child) {
		this.child = child;
	}
	
	public void name() throws IOException {
		System.out.println("please enter a  name ..");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String name = br.readLine();
		System.out.println("Please confirm your deatails below");
		System.out.println("Your name is  "+ name);
	}
	public void whichWork() {
		mom.cooking();
	}
	
	public void mainWork() {
	
		System.out.println("Don't distrub me Please...!!");
		child.main();
	}
	
	
}




类Mom.java



package TestingDependecy;

public class Mom {

	public void cooking() {
		System.out.println("I am cooking ");
		System.out.println(" what else i can do ?");
		
	}
}




Class Child



package TestingDependecy;

public class Child {

	
	public void main() {
		System.out.println("This is from child class");
	}
}




Class Family.java



package TestingDependecy;
import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import TestingDependecy.Dad;

public class Family {

	
	public static void main(String[] args) throws IOException {
		
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
		
		Dad d = context.getBean("dad", Dad.class);
		d.mainWork();
		System.out.println();
		d.whichWork();
		context.close();
		
	}
}




最后我的ApplicationContext.xml文件如下

的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">


<!-- This is for family Package -->
<bean id = "mom" 
	class="TestingDependecy.Mom">	
	</bean>
	
<bean id = "child" 
	class="TestingDependecy.Child">	
	</bean>	
<bean id = "dad" 
	class="TestingDependecy.Dad">
	
	<constructor-arg ref="mom"/>
	<constructor-arg ref="child"/>
	</bean>
&#13;
&#13;
&#13;

我在执行代码时得到以下内容。

请在下面找到错误。

&#13;
&#13;
May 04, 2018 8:45:02 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1a1cd57: startup date [Fri May 04 08:45:01 IST 2018]; root of context hierarchy
May 04, 2018 8:45:02 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [ApplicationContext.xml]
May 04, 2018 8:45:02 AM org.springframework.context.support.AbstractApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dad' defined in class path resource [ApplicationContext.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dad' defined in class path resource [ApplicationContext.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:243)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
	at TestingDependecy.Family.main(Family.java:13)
&#13;
&#13;
&#13;

请帮帮我,我在这里犯了什么错误?

此致 Saikiran。

2 个答案:

答案 0 :(得分:1)

ApplicationContext.xml中,您已将两个参数传递给dad bean的构造函数:

<bean id = "dad" 
  class="TestingDependecy.Dad">

   <constructor-arg ref="mom"/>
   <constructor-arg ref="child"/>
</bean>

所以你必须在Dad类中定义一个双参数构造函数,如下所示:

public class Dad {

   private Mom mom;
   private Child child;

   public Dad (Mom mom, Child child) {
       this.mom = mom;
       this.child = child;
   }
   ...
}

答案 1 :(得分:0)

注意 全部保留一个构造函数和相应的bean构造函数类

<bean id="e" class="com.test.Employee">
<constructor-arg value="12" type="int"></constructor-arg>
<constructor-arg value="UP"></constructor-arg>
<constructor-arg> <ref bean="a1"/> </constructor-arg >
<constructor-arg> <ref bean="company"/> </constructor-arg>
</bean>

public Employee(int idx, String name, Address address, Company company) {
    this.idx=idx;
    this.name=name;
    this.address=address;
    this.company=company;   
}