Ich möchte eine org.springframework.context.annotation.Condition-Schnittstelle verwenden, um einige @Configuration-Klassen beim Start zu deaktivieren/aktivieren. Beispiel unten:Verwenden von Kontext-Beans innerhalb einer Bedingung oder einer ConfigurationCondition
public class Condition implements ConfigurationCondition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//Gets the configuration manager from the context
RapidConfDocConfiguration.DocConf docConf = context.getBeanFactory().getBean(DocConf.class);
return docConf.isEnabled();
}
}
@Configuration
public class ConfDocConfiguration {
@Bean
public DocConf docConf() {
return new DocConf(true);
}
}
@Configuration
@Import(ConfDocConfiguration.class)
@Conditional({Condition.class})
public class RapidSwaggerConfiguration {
//Some configurations
}
Das Problem, das ich hier habe, ist, dass der Zustand ausgeführt wird, bevor das eine des Kontextes instanziiert wird und dann das ‚DocConf‘ ist noch nicht vorhanden. Die Bedingung funktioniert gut, wenn ich eine Umgebungsvariable oder etwas ähnliches lese.
Also, ist es möglich, diese Art von Bedingung basierend auf einer Spring Bean des Kontextes zu verwenden?
Dank für die Antwort danken. Die DocConf-Bean befindet sich tatsächlich in einer anderen @Configuration. Ich getestet mit dem ConfigurationPhase.REGISTER_BEAN und dem Code: 'context.getBeanFactory(). ContainsBeanDefinition ("docConf") gibt True wie in dem Artikel zurück. Die Definition der Bean ist im Kontext vorhanden, die Bean selbst jedoch nicht: 'context.getBeanFactory(). GetBean ("docConf")' löst eine NoSuchBeanDefinitionException aus. Mein Zweck hier ist in der Lage sein, mit der Bean-Instanz selbst zu interagieren. Ich könnte ein Profil verwenden, aber aus irgendeinem Grund, der meinem Projekt innewohnt, kann ich keine Federprofile verwenden. –
Es kann hilfreich sein zu wissen, wie Sie die DocConf-Konfiguration zum Kontext hinzufügen (z. B. über @Import oder @ComponentScan). – tkruse
@Importieren in die Konfigurationsklasse, die es definiert. Aber ich habe es auch mit einem Komponentenscan versucht. –