简体   繁体   English

Spring @ConditionalOnBean 不阻止创建 bean

[英]Spring @ConditionalOnBean not preventing bean from being created

I have several beans我有几个豆子

AudioConfig.java音频配置.java

@ConstructorBinding
@ConfigurationProperties(prefix = "audio")
@AllArgsConstructor
@Getter
@ConditionalOnProperty("audio.root-path")
public class AudioConfig {
    private final Path rootPath;
}

AudioFileProvider.java AudioFileProvider.java

@Component
@AllArgsConstructor
@Log4j2
@ConditionalOnBean(AudioConfig.class)
public class AudioFileProvider {
     private final AudioConfig audioConfig;
     ....

AudioCleanser.kt AudioCleanser.kt

@ConditionalOnBean(AudioFileProvider::class)
class AudioCleanser(
    private val dslContext: DSLContext,
    private val audioFileProvider: AudioFileProvider
)

So if my property audio.root-path is not defined then it should not try to instantiate AudioCleanser, right?所以如果我的属性 audio.root-path 没有定义那么它不应该尝试实例化 AudioCleanser,对吧?

Yet I get:但我得到:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 1 of constructor in AudioCleanser required a bean of type 'AudioFileProvider' that could not be found.


Action:

Consider defining a bean of type 'AudioFileProvider' in your configuration.

You can do it in several ways:您可以通过多种方式做到这一点:

  1. Use all conditions in AudioCleanser :使用AudioCleanser中的所有条件:
@ConditionalOnBean({AudioFileProvider::class,AudioConfig::class})
class AudioCleanser(
    private val dslContext: DSLContext,
    private val audioFileProvider: AudioFileProvider
)
  1. Use custom condition :
public class AudioEnabledCondition extends AllNestedConditions {

    public AudioEnabledCondition() {
        super(ConfigurationPhase.REGISTER_BEAN);
    }

    @ConditionalOnBean(AudioConfig.class)
    static class AudioConfigExistsCondition {

    }

    @ConditionalOnBean(AudioFileProvider.class)
    static class AudioFileProviderExistsCondition {

    }

}

@Conditional(AudioEnabledCondition::class)
class AudioCleanser(
    private val dslContext: DSLContext,
    private val audioFileProvider: AudioFileProvider
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM