Java 考虑在配置中定义一个类型为bean的bean

Java 考虑在配置中定义一个类型为bean的bean,java,spring,Java,Spring,我不理解这个错误或解决它的任何步骤。建议的行动对我来说没有多大意义。我看到像这样的问题被问了很多,但我仍然不理解潜在的问题 我得到的错误是: Description: Parameter 0 of constructor in com.yrc.mcc.core.batch.listener.ChunkSizeListener required a bean of type 'java.io.File' that could not be found.** Action: Consider de

我不理解这个错误或解决它的任何步骤。建议的行动对我来说没有多大意义。我看到像这样的问题被问了很多,但我仍然不理解潜在的问题

我得到的错误是:

Description:
Parameter 0 of constructor in com.yrc.mcc.core.batch.listener.ChunkSizeListener required a bean of type 'java.io.File' that could not be found.**

Action:
Consider defining a bean of type 'java.io.File' in your configuration.
我的课程内容:

@Component
public class ChunkSizeListener extends StepListenerSupport<Object, Object> {

    private FileWriter fileWriter;

    public ChunkSizeListener(File file) throws IOException {
        fileWriter = new FileWriter(file, true);
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            System.err.println("Unable to close writer");
        }
        return super.afterStep(stepExecution);
    }

    @Override
    public void beforeChunk(ChunkContext context) {
        try {
            fileWriter.write("your custom header");
            fileWriter.flush();
        } catch (IOException e) {
            System.err.println("Unable to write header to file");
        }
    }
}
@组件
公共类ChunkSizeListener扩展了StepListener支持{
私有文件编写器文件编写器;
公共ChunkSizeListener(文件)引发IOException{
fileWriter=新的fileWriter(file,true);
}
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
试一试{
fileWriter.close();
}捕获(IOE异常){
System.err.println(“无法关闭写入程序”);
}
返回super.afterStep(步骤执行);
}
@凌驾
chunkforecunk之前的公共void(ChunkContext上下文){
试一试{
write(“您的自定义头”);
fileWriter.flush();
}捕获(IOE异常){
System.err.println(“无法将头写入文件”);
}
}
}
很清楚

从Spring4.3开始,如果是一个类,它被配置为Spring bean,只有一个构造函数,自动连线注释可以 省略,Spring将使用该构造函数并注入所有必要的 依赖关系

因此,在您的情况下,spring希望有一个File类型的bean(这不是您的情况)作为bean,所以您可以做的是更新代码,在类中添加一个默认构造函数,如下所示:

@Component
public class ChunkSizeListener extends StepListenerSupport<Object, Object> {

    private FileWriter fileWriter;

    public ChunkSizeListener() {
        // not sure if you should keep the super() or not
        super();
    }

    public ChunkSizeListener(File file) throws IOException {
        fileWriter = new FileWriter(file, true);
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            System.err.println("Unable to close writer");
        }
        return super.afterStep(stepExecution);
    }

    @Override
    public void beforeChunk(ChunkContext context) {
        try {
            fileWriter.write("your custom header");
            fileWriter.flush();
        } catch (IOException e) {
            System.err.println("Unable to write header to file");
        }
    }
}
@组件
公共类ChunkSizeListener扩展了StepListener支持{
私有文件编写器文件编写器;
公共ChunkSizeListener(){
//不确定是否应该保留super()
超级();
}
公共ChunkSizeListener(文件)引发IOException{
fileWriter=新的fileWriter(file,true);
}
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
试一试{
fileWriter.close();
}捕获(IOE异常){
System.err.println(“无法关闭写入程序”);
}
返回super.afterStep(步骤执行);
}
@凌驾
chunkforecunk之前的公共void(ChunkContext上下文){
试一试{
write(“您的自定义头”);
fileWriter.flush();
}捕获(IOE异常){
System.err.println(“无法将头写入文件”);
}
}
}
您有一个Springbean(因为它有一个
@组件
注释),其构造函数将
文件
作为参数

当Spring要创建这个bean的实例时,它将寻找另一个所需类型的springbean(在本例中为
文件
)来调用构造函数

由于您的应用程序上下文中没有所需类型的Springbean,因此会收到此错误消息

但是,正如错误消息所示,向Spring应用程序上下文添加
文件
对象很可能不是适合您的解决方案

例如,您可以将构造函数更改为:

public ChunkSizeListener(@Value("${filename}") String filename) throws IOException {
    fileWriter = new FileWriter(new File(filename), true);
}
然后需要一个Spring属性源来定义“filename”属性

如果您的应用程序是Spring Boot应用程序,只需在
应用程序中添加一行。属性

filename=/some/directory/filename.txt

你能把整个追踪和你的pom都贴出来吗?