java - 构造函数中的依赖注入(inject)

标签 java spring dependency-injection constructor frameworks

我的代码在构造函数中使用依赖注入(inject)时遇到问题。我的类中有三个构造函数:

public class Meal {
private Ingredients ingredient;
private String text; 
private int;

public Meal(Ingredients ingredient) {
    this.ingredient = ingredient;
}

public Meal(String text) {
    this.text = text;
}

public Meal(int number) {
    this.number = number;
}
}

在bean配置文件中,它看起来像这样:

    <bean id="ingredient"
    class="mytest.Sugar"
></bean>

<bean id="myMeal" 
    class="mytest.Meal">
    <constructor-arg ref="ingredient"/>     
    <constructor-arg type="java.lang.String" value="hello"/>
    <constructor-arg type="int" value="1"/>

</bean>

编译后出现这样的错误:

WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myMeal' defined in class path resource [app.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 'myMeal' defined in class path resource [app.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:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:758)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
at mytest.MainApp.main(MainApp.java:9)

我不知道如何解决它。有人可以帮助我吗?

最佳答案

您的bean配置myMeal有三个构造函数参数,而实际的构造函数只有一个。

删除<constructor-arg type="java.lang.String" value="hello"/><constructor-arg type="int" value="1"/>从配置或将相应的缺失参数添加到类的构造函数 Meal .

简而言之,您需要将所有参数放在一个构造函数中,而不是放在单独的构造函数中。

关于java - 构造函数中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151505/

相关文章:

java - 应用程序意外停止,我想做的就是激活一个按钮并进入另一个屏幕

java - 插入多行 - java 准备好的语句失败

javascript - typescript 未生成正确的 system.register

dependency-injection - 服务堆栈国际奥委会。 AutoWire(this) 尝试注入(inject)未在容器中注册的公共(public)属性

c# - 如何配置统一容器以提供字符串构造函数值?

JavaFX: ScrollView 滑动效果

java - 如何运行一系列动画?动画集让我失望

java - 如何遍历每一行,计算差异然后对所有内容进行平均?

java - Volatile 与并发收集一起使用?

Spring MVC 在 session 中保存用户数据