Kotlin: необязательная инъекция зависимостей с использованием Spring

Какова альтернатива kotlin для

@Autowired(required=false)
private DependencyC dependencyC;

а также

private Optional<HelloService> optionalHelloService;
public HelloController(Optional<HelloService> helloService) {
    this.optionalHelloService = helloService;
}

Что вы пробовали? Что в нем не сработало? Как вы думаете, почему существует принципиальная разница между java и kotkin для внедрения зависимостей?

Erwin Bolwidt 28.05.2019 11:03
1
1
931
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Затем вы должны сделать это свойство обнуляемым:

class HelloController(
    @Autowired(required = false) val helloService: HelloService?
)

Я пытаюсь сделать это со списком бобов, но это не работает. Есть идеи? @Autowired(required = false) val requestHandlingServices: List<RequestHandlingService>?

L.Butz 10.10.2019 17:17

Принятый ответ устарел. Spring использует информацию о типе, чтобы определить, является ли компонент необязательным. Видеть https://docs.spring.io/spring/docs/current/spring-framework-reference/languages.html#kotlin-annotations, в частности

In a similar fashion, Spring bean injection with @Autowired, @Bean, or @Inject uses this information to determine if a bean is required or not.

Поскольку @Autowired является необязательным для параметров конструктора, самая короткая альтернатива Kotlin —

class HelloController(private val optionalHelloService: HelloService?)

Это стало возможным с момента первого выпуска поддержки Kotlin в Spring Framework 5.0.0.

r33tnup 15.09.2020 12:28

Другие вопросы по теме