Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring中通过构造函数arg时出现问题_Java_Spring - Fatal编程技术网

Java 在Spring中通过构造函数arg时出现问题

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;

我在使用Spring将构造函数arg传递到我的项目中时遇到了一些问题。我相信这是件小事,但我仍在努力学习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文件上走来走去,找不到它产生这个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>