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



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

我的班级名称如下。

班爸爸.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();
	}
	
	
}

班妈妈.java

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

类子

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

班级家族.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();
		
	}
}

最后我的应用程序上下文.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">
<!-- 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>

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

请在下面找到错误。

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)

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

问候 赛基兰。

ApplicationContext.xml中,您已经将两个参数传递给了 Beandad构造函数:

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

注意 都保留一个构造函数和相应的 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;   
}

最新更新