Size: a a a

2020 July 10

AE

Alexandr Emelyanov in Kotlin JVM
@Bean
@RequestScope
open requestScopedBean() = HelloMessageGenerator()

@Controller
open class ScopesController(private val requestScopedBean: HelloMessageGenerator) {
   
}
источник

RI

Ruslan Ibragimov in Kotlin JVM
Alexandr Emelyanov
нет, контроллер не будет пересоздаваться, в него проинжектится прокси и все
Т.е. на каждый доступ будет вызываться код прокси который должен решить как поступить с данным вызовом
источник

AE

Alexandr Emelyanov in Kotlin JVM
Ruslan Ibragimov
Т.е. на каждый доступ будет вызываться код прокси который должен решить как поступить с данным вызовом
да
источник

SM

Sergey Morgunov in Kotlin JVM
Для меня наоборот всегда было логичным, что на каждый get от провайдера получать new объект. И если хочется один на всех, то нужно явным образом сказать, что это Singleton. Но возможно это потому что уже с конкретными DI долго возишься и они ведут себя именно так. Тот же Guice например
источник

ПФ

Паша Финкельштейн... in Kotlin JVM
Sergey Morgunov
Для меня наоборот всегда было логичным, что на каждый get от провайдера получать new объект. И если хочется один на всех, то нужно явным образом сказать, что это Singleton. Но возможно это потому что уже с конкретными DI долго возишься и они ведут себя именно так. Тот же Guice например
Ну да, для меня это разница между провайдером и синглтоном
источник

RI

Ruslan Ibragimov in Kotlin JVM
Sergey Morgunov
Для меня наоборот всегда было логичным, что на каждый get от провайдера получать new объект. И если хочется один на всех, то нужно явным образом сказать, что это Singleton. Но возможно это потому что уже с конкретными DI долго возишься и они ведут себя именно так. Тот же Guice например
Да, так ведёт себя guice, но spring ведёт себя наоборот, и мне кажется это логичным - синглтон по-умолчанию.

@asm0dey провайдер может иметь скоуп так же как как и просто инжект, т.е и первое и второе поведение возможно в зависимости от скоупа
источник

ПФ

Паша Финкельштейн... in Kotlin JVM
Ruslan Ibragimov
Да, так ведёт себя guice, но spring ведёт себя наоборот, и мне кажется это логичным - синглтон по-умолчанию.

@asm0dey провайдер может иметь скоуп так же как как и просто инжект, т.е и первое и второе поведение возможно в зависимости от скоупа
Да
источник
2020 July 15

A

Aleksandr in Kotlin JVM
Товарищи, есть тупой вопрос, но тем не менее.
Какие могут быть причины того, что java код не видит ИМЕННО константные поля companion object'а?
(доступ к SomeClass.Companion есть)

class SomeClass {
...

companion object {
  const val SOME_VAL = ...
}
источник

e

expert in Kotlin JVM
Aleksandr
Товарищи, есть тупой вопрос, но тем не менее.
Какие могут быть причины того, что java код не видит ИМЕННО константные поля companion object'а?
(доступ к SomeClass.Companion есть)

class SomeClass {
...

companion object {
  const val SOME_VAL = ...
}
источник

A

Aleksandr in Kotlin JVM
Есть
источник

AN

Alexander Nozik in Kotlin JVM
Aleksandr
Товарищи, есть тупой вопрос, но тем не менее.
Какие могут быть причины того, что java код не видит ИМЕННО константные поля companion object'а?
(доступ к SomeClass.Companion есть)

class SomeClass {
...

companion object {
  const val SOME_VAL = ...
}
Потому что вероятно компилятор их пихает в SomeClass, а не в SomeClass.Companion
источник

e

expert in Kotlin JVM
Aleksandr
Есть
Я б наверное байткод декомпилировал cfr-ом и посмотрел, что там творится.
источник

A

Aleksandr in Kotlin JVM
Ну если верить конвертации байткода в Java-код, то там короче так:
public class SomeClass {
...
@NotNull
public static final String SOME_VAL = ...
}
источник

A

Aleksandr in Kotlin JVM
Короче, выглядит адекватно.

Может быть это из-за ордера компиляции котлин кода и джава кода
источник

e

expert in Kotlin JVM
Aleksandr
Ну если верить конвертации байткода в Java-код, то там короче так:
public class SomeClass {
...
@NotNull
public static final String SOME_VAL = ...
}
Нозик оказался прав :)
источник

AN

Alexander Nozik in Kotlin JVM
Aleksandr
Ну если верить конвертации байткода в Java-код, то там короче так:
public class SomeClass {
...
@NotNull
public static final String SOME_VAL = ...
}
Ну я и говорю, он у вас компаньен соптимизировал
источник

A

Aleksandr in Kotlin JVM
А, ну да, если мы про это. Он заинлайнил
источник

AN

Alexander Nozik in Kotlin JVM
Если в компаньоне нет ничего сюжетного, то он не генерируется
источник

A

Aleksandr in Kotlin JVM
Понятно, а как можно это красиво убрать?
источник

AN

Alexander Nozik in Kotlin JVM
Aleksandr
Понятно, а как можно это красиво убрать?
А зачем убирать? Кто мешает вызвать поле класса
источник