IntelliJ не может найти Spring bean из объекта Kotlin - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть приложение Spring Boot 2 + Kotlin, открытое с IntelliJ 2019.1.

В этом приложении я аннотирую некоторые объекты Kotlin с помощью @Component.Пример:

@Component
object MyObject: MyInterface {
    // code
}

У меня много разных реализаций MyInterface (все с объектами Kotlin), и я хочу внедрить их все в список в другом bean-компоненте.Пример:

@Component
class MyComponent @Autowired constructor(private val objects: List<MyInterface>) {
    // code
}

Код работает правильно (бины вставляются в список objects), но IntelliJ выдает ошибку, говорящую:

Не удалось выполнить автоматическое подключение.Нет бобов?расширяет MyInterface 'или' Список'типы найдены.

Если я поменяю' объект 'на' класс 'в' MyObject ', ошибка исчезнет.

Мои вопросы:

  • Это проблема с IntelliJ?
  • Не рекомендуется ли комментировать объекты Kotlin @Component?

Ответы [ 3 ]

1 голос
/ 28 апреля 2019

Для информации, в качестве возможного обходного пути, пока тикет , созданный Николаем в , этот ответ не обрабатывается, я игнорирую ошибку / предупреждение только там, где мне нужно, с @Suppress("SpringJavaInjectionPointsAutowiringInspection").Пример:

@Suppress("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private lateinit var kotlinObjectBeans: List<MyInterface>

Я надеюсь, что это может помочь другим, которые не хотят отключать эту проверку в другом месте.

1 голос

Немного странно использовать объекты Kotlin в качестве @Component -s, потому что, если ваш класс знает, что он будет использоваться внутри Spring-контейнера, вы получите большую гибкость, если делегируете Spring, решение о том, будет ли этот классбудь одиночкой или нет, и все остальное управление жизненным циклом.

Но практически я не вижу причин, по которым его можно было бы «не рекомендовать», если вы знаете, что делаете, и знаете о возможных ошибках, если вашobject становится состоящим.

Поэтому я думаю, что IDEA должна поддержать ваше дело, и я заполнил билет IDEA-211826

0 голосов
/ 29 апреля 2019

Я бы порекомендовал не использовать объекты kotlin с @Component или любые другие аннотации bean-компонентов.

Существует два аспекта, и их сочетание приводит к множеству проблем:

  1. В вашем приложении может быть несколько ApplicationContext экземпляров.
  2. Объект Kotlin связан с конкретным ClassLoader
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...