[JAVA] Changer de beans avec les expressions canoniques @ConditionalOnExpression et SpEL

Par exemple, supposons que vous souhaitiez changer les beans enregistrés en fonction des valeurs du fichier de propriétés spring-boot. De plus, je souhaite changer le bean à enregistrer en fonction du moment où la valeur de la propriété correspond à une certaine expression régulière.

Dans ce cas, utilisez une expression régulière dans SpEL de @ ConditionalOnExpression```.

Code source

Dossier de propriété

Supposons maintenant qu'une valeur de propriété puisse prendre v0004 de` `` v0001.

src/main/resources/application.yml


oncondition:
#  value: v0001
#  value: v0002
#  value: v0003
  value: v0004

À ce stade, on suppose que le bean doit être commuté entre le cas de v0001 à` `` v0003 et le cas de` `` v0004```.

Classes qui peuvent être changées

Créez une interface appropriée.

public interface ISample {
    String value();
}
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;

@Component
@ConditionalOnExpression("#{'${oncondition.value}' matches 'v000[123]'}")
public class Value123 implements ISample {
    @Override
    public String value() {
        return "value123";
    }
}
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;

@Component
@ConditionalOnExpression("#{'${oncondition.value}' matches 'v0004'}")
public class Value4 implements ISample {
    @Override
    public String value() {
        return "value4";
    }
}

@ConditionalOnExpression est activé lorsque SpEL correspond. ici${oncondition.value}Parcourir les propriétés avec les correspondances d'expression régulière'v000[123]'Est décrit. Cela rend oncondition.la valeur est v0001,v0002,Cette classe est valable pour v0003.



## Courir
 La classe de démarrage à vérifier à la fin.

```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Autowired
    ISample hoge;
    
    @Override
    public void run(String... args) throws Exception {
        System.out.println(hoge.value());
    }
}

Recommended Posts

Changer de beans avec les expressions canoniques @ConditionalOnExpression et SpEL
Distinguer les entiers et les fractions avec des expressions régulières
[Ruby] Exclure et remplacer des modèles spécifiques par des expressions régulières
Analyser les adresses japonaises avec des expressions régulières
Facile à parcourir avec les expressions régulières Java
switch et EnumMap
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
[RSpec] WebMock gère les expressions régulières et les chaînes de requête Array