我正在尝试创建一个在构造函数中传递文件和 boolean 值的简单 bean,如下所示:
@Service
public class FileBasedSink implements Sink {
protected File outputDirectory;
protected boolean useCompression;
public FileBasedSink(File outputDirectory, boolean useCompression) {
this.outputDirectory = outputDirectory;
this.useCompression = useCompression;
}
}
和 spring-context 文件:
<context:component-scan base-package="org.aksw.simba.squirrel" />
<!--
<bean id="workerImpl" class="org.aksw.simba.squirrel.worker.impl.WorkerImpl"></bean>
-->
<!-- Output folder for FileBasedSink -->
<bean id="outputFolder" class="java.io.File">
<constructor-arg index="0" value="{systemProperties['OUTPUT_FOLDER']}" />
</bean>
<!-- File Based Sink implementation -->
<bean id="fileSink" class="org.aksw.simba.squirrel.sink.impl.file.FileBasedSink">
<constructor-arg name="outputDirectory" ref="outputFolder" />
<constructor-arg name="useCompression" value="true"/>
</bean>
这应该很简单,但不知何故,spring 抛出 NoSuchBeanDefinitionException:没有可用的 'boolean' 类型的合格 bean。
我在这里错过了什么?
最佳答案
您正在混合组件扫描和 XML bean 定义。
方法一:
使用 @Service
-注释,然后添加 @Autowired
给构造函数。删除 FileBasedSink
的定义- 来自 XML 的 bean。
如果它是一个常量 boolean bean,那么 @Value("true")
到 boolean 参数。
或者,正如@Obi Wan - PallavJha 所建议的那样,您可以在上下文中的某处声明 boolean bean 并使用 @Qualifier("booleanBean")
- boolean 参数的注释。
方法 2:
通过 <constructor-arg's>
在 XML 中定义 bean ,然后删除 @Service
-注释。
关于java - Spring不在构造函数中使用 boolean 值创建bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50335236/