Java 在Spring中通过构造函数arg时出现问题
我在使用Spring将构造函数arg传递到我的项目中时遇到了一些问题。我相信这是件小事,但我仍在努力学习Spring。我的代码在这里:Java 在Spring中通过构造函数arg时出现问题,java,spring,Java,Spring,我在使用Spring将构造函数arg传递到我的项目中时遇到了一些问题。我相信这是件小事,但我仍在努力学习Spring。我的代码在这里: package com.WheelOfFortune.Client; import java.util.ArrayList; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.annotation.Autowired;
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文件上走来走去,找不到它产生这个stacktrace的任何原因。有什么建议吗?您的配置中存在多个错误 首先,关于
构造函数arg
问题,在XML中使用单个arg构造函数:
<bean id="balance" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg>
<value>0</value>
</constructor-arg>
</bean>
0
但您的Java仅使用4个参数定义此构造函数:
public Spinner(int balance, String vacation, String car, ArrayList<String> spinWheel);
公共微调器(整数平衡、字符串假期、字符串车、ArrayList微调轮);
你可以写的是:
<bean id="spinner" class="com.WheelOfFortune.Client.Spinner">
<constructor-arg>
<value>0</value>
</constructor-arg>
<constructor-arg ref="vacation">
...
</bean>
0
...
但是在你需要纠正你的假期之前
bean(对于汽车
和纺车
)。您将其键入为com.wheeloffort.Client.Spinner
,但它是一个字符串
最终,您将注释和XML配置混合在一起。这不是问题,但在启动Spring时可能会让人困惑,我建议您要么全部使用XML,要么全部使用注释
如果您需要更多详细信息,请随时询问;)
编辑:重新阅读您的文章,我实际上理解了您想要编写的内容,如果您激活组件扫描,仅更正bean的类型可能就足够了。您的xml需要一个单参数构造函数,但是在您的类中找不到该构造函数。您有一个默认的无参数构造函数和一个有4个元素的构造函数。好的,所以我需要添加到我的XML文档中,以期望得到一个4参数的构造函数。。是这样吗?如果不告诉Spring使用哪个构造函数,Spring还能实例化一个对象吗。另外,你的代码也有缺陷。永远不要创建BeanFactory
的新实例来获取bean,关键是要使用依赖注入,更不用说如果这段代码有效,你将得到一个创建BeanFactory
实例的无休止循环。感谢您提供的相关信息。它不起作用是有道理的。
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>