Definición de frijol con dos posibles implementaciones

zed:

Hasta el momento, no tenía una definición muy simple de frijol que se parecía a esto:

@Bean
@Conditional(value=ConditionClass.class)
SomeInterface myMethodImpl(){
    return new ImplementationOne();
}

Sin embargo, ahora tengo situación en la que se ha añadido la clase de implementación adicional, vamos a llamarlo ImplementationTwo, que debe ser usado en lugar de ImplementationOnecuando la opción está habilitada en el archivo de configuración.

Así que lo que necesito es algo como esto:

@Bean
@Conditional(value=ConditionClass.class)
SomeInterface myMethodImpl(){
    return context.getEnvironment().getProperty("optionEnabled") ? new 
   ImplementationOne() : new ImplementationTwo();
}

Básicamente una manera de crear una instancia de la aplicación correcta en el momento de frijol definición basada en el valor de configuración. ¿Es esto posible y puede alguien por favor dar un ejemplo? Gracias

destruir:

Es posible implementar esto sin usar @Conditional.

Asumiendo que tiene un interfaz SomeInterfacey dos implementaciones ImplOne ImplTwo:

SomeInterface.java

public interface SomeInterface {
    void someMethod();
}

ImplOne.java

public class ImplOne implements SomeInterface{
    @Override
    public void someMethod() {
       // do something
    }
}

ImplTwo.java

public class ImplTwo implements SomeInterface{
    @Override
    public void someMethod() {
       // do something else
    }
}

A continuación, puede controlar qué aplicación se utiliza en una clase de configuración de esta manera:

MyConfig.java

@Configuration
public class MyConfig {

    @Autowired
    private ApplicationContext context;

    @Bean
    public SomeInterface someInterface() {
        if (this.context.getEnvironment().getProperty("implementation") != null) {
            return new ImplementationOne();
        } else {
            return new ImplementationTwo();
        }
    }
}

Asegúrese de que el componente de exploración de los hallazgos de la primavera MyConfig. A continuación, se puede utilizar @Autowiredpara inyectar la aplicación correcta en cualquier otro lugar en el código.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=209102&siteId=1
Recomendado
Clasificación