gpt4 book ai didi

java - 在 Spring 中传递构造函数参数时遇到问题

转载 作者:行者123 更新时间:2023-11-30 07:52:51 25 4
gpt4 key购买 nike

我在使用 Spring 将构造函数参数传递到我的项目中时遇到一些问题。我确信这是一件微不足道的事情,但我仍在努力学习 Spring。我这里有我的代码:

package com.WheelOfFortune.Client;

import java.util.ArrayList;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.stereotype.Controller;



@Controller
public class Spinner implements SpinnerInterface{

private int balance;
private String vacation;
private String car;
private ArrayList<String> spinWheel;

//Methods can access same instance of factory
BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
"src/main/resources/spring/SpinWheel.xml"));

public Spinner(){}

@Autowired
public Spinner(int balance, String vacation, String car, ArrayList<String> spinWheel)
{
this.balance = balance;
this.vacation = vacation;
this.car = car;
this.spinWheel = spinWheel;
}

//Setters and Getters
public void setSpinWheel()
{
this.spinWheel = spinWheel;
}
public ArrayList<String> getSpinWheel(ArrayList<String> getSpinWheel)
{
return spinWheel;
}
public void setBalance()
{
this.balance = balance;
}
public void setVacation()
{
this.vacation = vacation;
}
public void setCar()
{
this.car = car;
}
public int getBalance(int balance)
{
return balance;
}
public String getVacation(String vacation)
{
return vacation;
}
public String getCar(String car)
{
return car;
}

public void spin() {
Spinner spin = (Spinner) factory.getBean("spinWheel");

}

public void addToBank(boolean isCorrect) {
// TODO Auto-generated method stub

}

public void deductFromBank() {
// TODO Auto-generated method stub

}

public void vacation(boolean isCorrect) {
Spinner vacation = (Spinner) factory.getBean("vacation");
System.out.println(vacation);
}
public void car(boolean isCorrect){
Spinner car = (Spinner) factory.getBean("car");
}
}

还有我的 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-2.5.xsd">

<bean id="balance" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg>
<value>0</value>
</constructor-arg>
</bean>

<bean id="vacation" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg value="You Won a Trip to Hawaii!!" />
</bean>

<bean id="car" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg value="You Won a brand new Corvette!!" />
</bean>

<bean id="spinWheel" class="com.WheelOfFortune.Client.Spinner">
<property name="word">
<list>
<value>$100</value>
<value>$150</value>
<value>$275</value>
<value>$400</value>
<value>$500</value>
<value>$750</value>
<value>$1000</value>
<value>Bankruptcy</value>
<value>$5000</value>
<value>Vacation</value>
<value>Car</value>
</list>
</property>
</bean>
</beans>

每当我尝试运行该项目时,我总是会得到堆栈跟踪:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'vacation' defined in file [/home/ryan/workspace/wheel/src/main/resources/spring/SpinWheel.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:250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at com.WheelOfFortune.Client.Spinner.vacation(Spinner.java:74)
at com.WheelOfFortune.Client.Client.main(Client.java:10)

我对 XML 文件进行了仔细研究,但找不到它产生此堆栈跟踪的任何原因。有什么建议吗?

最佳答案

您的配置中有多个错误的地方。

首先,关于您的 constructor-arg 问题,您在 XML 中使用单个 arg 构造函数:

<bean id="balance" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg>
<value>0</value>
</constructor-arg>
</bean>

但是你的 Java 只定义了带有 4 个参数的构造函数:

public Spinner(int balance, String vacation, String car, ArrayList<String> spinWheel);

你可以写的是:

<bean id="spinner" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg>
<value>0</value>
</constructor-arg>
<constructor-arg ref="vacation">
...
</bean>

但在此之前,您需要更正您的 vacation bean(对于 carspinWheel 也是如此)。您将其输入为 com.WheelOfFortune.Client.Spinner,但它是一个 String

最终,您将混合注释和 XML 配置。这不是问题,但在启动 Spring 时可能会令人困惑,我建议要么全部在 XML 中完成,要么全部在注释中完成。

如果您需要更多详细信息,请随时询问;)

<小时/>

编辑:重新阅读您的文章,我实际上理解您想写的内容,如果您激活组件扫描,只需更正 bean 的类型就足够了。

关于java - 在 Spring 中传递构造函数参数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33132955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com