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都贴出来吗?