java - Spring不在构造函数中使用 boolean 值创建bean

标签 java spring dependency-injection

我正在尝试创建一个在构造函数中传递文件和 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/

相关文章:

linux - 哪个 JDK 的发行版可以运行 `javac -source 1.6 -target 1.5` ?

java - 并行文件处理 : What are recommended ways?

java - 仅将 https 与 spring cloud 微服务实例一起使用

dependency-injection - 处理对象之间循环依赖的最佳方法是什么?

dependency-injection - 使用 RavenDB 设置 dotnet 核心

java - 如何避免此代码中的循环

java - 在 Java applet 中,由 javascript 传递给 Java Applet 的字符串数据为 null

java - IncompatibleClassChangeError on Spring WAR deploy

java - Tomcat 8.0 不会以纯 Spring MVC 模板启动

java - 如何重构我的 servlet 以利用依赖注入(inject)?