inyección de primavera con opcional de Java

tiberiu

Cuando se trata de inyectar una Optional<T>, Primavera nunca llama mi frijol, y en su lugar se inyecta una Optional.empty().

Aquí hay un código de ejemplo:

@Configuration
public class Initialize {

    @Value("optionalValue")
    private String testString;

    @Bean (name = "getOptionalString")
    public Optional<String> getOptionalString() {
        return Optional.of(this.testString); //breakpoint put here, is never called
    }
}

@Component
public class Test {

    public Test(@Qualifier("getOptionalString") Optional<String> optional) {
      // optional's value is Optional.empty() here
    }

Me di cuenta de que (por poner un punto de interrupción) de la @Beanque nunca se llama. Si tuviera que retirar el Optional<String>, y simplemente devolver una String, entonces funciona!

Sé que Springtiene su propia dependencia opcional, pero estoy perplejo en cuanto a por qué esto no funciona (lo leí en línea dice que debería), y también no entender cómo se inicializa a Optional.empty()?

JB Nizet:

La documentación dice:

se puede expresar la naturaleza no se requiere de una dependencia especial a través de java.util.Optional de Java 8, tal como muestra el siguiente ejemplo:

public class SimpleMovieLister {

    @Autowired
    public void setMovieFinder(Optional<MovieFinder> movieFinder) {
        ...
    }
}

Así, utilizando opcional como el tipo de un grano no es una idea buena.

Supongo que te gusta

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