[英]Spring @ConditionalOnBean not preventing bean from being created
I have several beans我有几个豆子
@ConstructorBinding
@ConfigurationProperties(prefix = "audio")
@AllArgsConstructor
@Getter
@ConditionalOnProperty("audio.root-path")
public class AudioConfig {
private final Path rootPath;
}
@Component
@AllArgsConstructor
@Log4j2
@ConditionalOnBean(AudioConfig.class)
public class AudioFileProvider {
private final AudioConfig audioConfig;
....
@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:您可以通过多种方式做到这一点:
AudioCleanser
:使用AudioCleanser
中的所有条件:@ConditionalOnBean({AudioFileProvider::class,AudioConfig::class})
class AudioCleanser(
private val dslContext: DSLContext,
private val audioFileProvider: AudioFileProvider
)
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.