
Руслан
12.02.2017
20:30:56
если спринг - то да, так можно
можно еще @Component не писать, а делать это в java-config
@Bean fun b(a: A) = B(a)

Aliaksei
12.02.2017
20:35:18
Ну вообще класс придётся пометить как компонент в который будешь инжектить

Google

Руслан
12.02.2017
20:35:36
С @Bean - нет

Aliaksei
12.02.2017
20:37:07
бин сам по себе добавит B в контекст
а вот дальше его надо из контекста досттаь

Руслан
12.02.2017
20:37:48
не понял что ты написал
вот у меня есть A, B, C... и класс конфигурции
в конфиге я пишу
@Bean fun b(a: A) = B(a)
и все

Aliaksei
12.02.2017
20:38:18
fun b создаст бин и положит его в контекст

Руслан
12.02.2017
20:38:52

Aliaksei
12.02.2017
20:39:32
бин B не инжектинится никуда если ты не пометишь таргет класс аннотацией
@Bean fun b(a: A) = B(a)
@Component
class C(val b: B)
Вот так будет работать

Руслан
12.02.2017
20:41:14
а можно вот так, и все будет работать:
class A
class B(val a: A)
class C(val a: A, val b: B)
@Bean fun a() = A()
@Bean fun b(a: A) = B(a)
@Bean fun c(a: A, b: B) = C(a, b)
Потом выкинуть спринг, и заменить на бутик будет проще)

Aliaksei
12.02.2017
20:42:20
эээ, ну и как потом ты эти классы a,b,c будешь использовать? ))

Google

Aliaksei
12.02.2017
20:42:39
да, в @Bean всё придёт что надо
но и дальше что? ))

Руслан
12.02.2017
20:42:56
они так же будут в контексте лежать, как и то что @Component/@Service/@Controller пометил

Tony
12.02.2017
20:43:21
а есть Kotlin Spring?

Руслан
12.02.2017
20:43:33
Есть, офф саппорт от спринга для котлина
в 5.0 будет точнее

Tony
12.02.2017
20:43:45
rhenj)
круто)

Руслан
12.02.2017
20:44:02
ну и котлин запилили плагины для компилятора
kotlin-spring
kotlin-noarg
...

Sergey
12.02.2017
20:44:06

Aliaksei
12.02.2017
20:44:28
когда и java9

Serhiy
12.02.2017
20:44:40
/stat@combot

Combot
12.02.2017
20:44:41
combot.org/chat/-1001032833563

Руслан
12.02.2017
20:44:51

Aliaksei
12.02.2017
20:45:15
я про то что если ты напишешь class C(val a: A, val b: B)
в ваакуме - то магии не будет, надо класс проаннотировать всё равно что бы туда инжектнулось
Выпустить RC2 например

Руслан
12.02.2017
20:46:42

Aliaksei
12.02.2017
20:50:24
Ну про это одно и тоже или я не понял вопроса, @component нужна если хочешь получить инжект, @bean если нужно создать объект

Руслан
12.02.2017
20:51:24
Ну провайдер и просто бин

Google

Руслан
12.02.2017
20:51:55
если хочется бины которые ничего не знают о спринге - просто используй провайдер (@Bean)

Aliaksei
12.02.2017
20:55:37
ну если всё приложение в одном классе то да

Руслан
12.02.2017
20:56:32
Да не обязательно, таким образом можно отключить нафиг компонент скан и ускорить стартап)

Boris
12.02.2017
20:56:53
Я вот люто плюсую за java-конфик и против @Components
Компонент скан это не по джедайски

Aliaksei
12.02.2017
21:00:17
да ок, пусть будет всё по джедайски, создавать бины как угодно можно. Вопрос же был как инжектнуть эти созданные бины
то что насоздавать бины через @bean и там всё будет збс - это хорошо, спору нет

Boris
12.02.2017
21:01:08
Так инжектить их нужно прямо в другие методы создания бинов джаваконфига

Руслан
12.02.2017
21:01:11
в функцию-провайдер инжектить :)
@Bean fun c(a: A, b: B) = C(a, b)

Boris
12.02.2017
21:01:40
Вот, Руслан дело говорит

Sergey
12.02.2017
21:02:09

Aliaksei
12.02.2017
21:02:39
ребятки, ну вот простой пример, есть @RestController

Руслан
12.02.2017
21:02:50

Sergey
12.02.2017
21:02:55
у Guice разве не компонент скан?

Aliaksei
12.02.2017
21:03:14
я пометил им класс, и всё в конструктор пришло, и задно рест во все методы

Руслан
12.02.2017
21:03:20

Sergey
12.02.2017
21:03:52
ну вот в примере что я привел, там нет модулей

Aliaksei
12.02.2017
21:03:52
ну и бины и сервисы которые пришли к нему в конструктор я создал как белый парень, через java config

Sergey
12.02.2017
21:04:00
биндинги ж только для интерфейсов, не?

Aliaksei
12.02.2017
21:04:55

Google

Sergey
12.02.2017
21:05:44
а если бинов тысячи? не устанешь их описывать?

Руслан
12.02.2017
21:05:59
биндинги ж только для интерфейсов, не?
канонический пример джуса
binder.bind(BuildInfoService.class).to(BuildInfoServiceImpl.class).in(Singleton.class);
binder.bind(CayenneService.class).to(CayenneServiceImpl.class).in(Singleton.class);
Да, простите за Impl)

Aliaksei
12.02.2017
21:07:24

Руслан
12.02.2017
21:07:30

Sergey
12.02.2017
21:07:58

Boris
12.02.2017
21:08:23
ну, для этого бины обычно разбивают по разным конфигурациям

Aliaksei
12.02.2017
21:08:26
всё что может жить без спринга – должно жить без спринга как можно дольше
но не наоборот

Sergey
12.02.2017
21:10:20
хм. пытался собрать небольшую jar, а мне высерает no main manifest attribute. думал я рукажоп, так скачал https://github.com/JetBrains/kotlin-examples/tree/master/gradle/hello-world
java -jar kotlin-examples/gradle/hello-world/build/libs/hello-world.jar
no main manifest attribute, in kotlin-examples/gradle/hello-world/build/libs/hello-world.jar
wtf?

Руслан
12.02.2017
21:10:36
как ты собирал?

Sergey
12.02.2017
21:10:59
gradle clean build

Руслан
12.02.2017
21:11:22
ага, а кто Main-Class пропишет в манифест?
А зависимости кто в класс пас положит?

Boris
12.02.2017
21:12:43
gradlew run

Sergey
12.02.2017
21:12:45
apply plugin: 'application'
mainClassName = 'demo.HelloWorldKt'
этого мало?

Руслан
12.02.2017
21:12:59
buildscript {
repositories {
jcenter()
}
dependencies {
classpath("com.github.jengelman.gradle.plugins:shadow:1.2.4")
}
}
apply plugin: "com.github.johnrengelman.shadow"
в зависимости от задачи fat-jar может быть лучше

Google

Руслан
12.02.2017
21:13:52
apply plugin: 'application'
собирает zip/tar/folder где будет app_name.sh/app_name.bat
для спринг-бута, у бутового плагина есть bootRepackage
у shadow плагина таска называется shadowJar
а у application - distZip/disTar (afaik)

Boris
12.02.2017
21:15:23
у бута поприятней инфраструктура для фэтджара

Sergey
12.02.2017
21:15:36
у меня просто есть приложуха и там плагин "org.springframework.boot" видимо это делает за меня
?

Boris
12.02.2017
21:15:52

Руслан
12.02.2017
21:16:03
вот так вот, пользуешься бутом и не знаешь how things works

Boris
12.02.2017
21:16:36
бут для того и нужен, чтобы когда жареный петух клюнет, ты вообще ничего не смог понять из того, что проихсодит

Руслан
12.02.2017
21:16:57

Boris
12.02.2017
21:17:09

Руслан
12.02.2017
21:17:39
а ты про то что boot-jar умеет в линукс-сервисы?

Boris
12.02.2017
21:17:42
у него своя инфраструктура и даже со своим класслоадером специальным
не только

Руслан
12.02.2017
21:18:00
так а смысл своего класслодера

Boris
12.02.2017
21:18:17
чтобы грузить либы из специальной папочки в Jar-нике

Руслан
12.02.2017
21:18:50
но shadow просто разворачивает все в один джар, и тогда не нужно это

Boris
12.02.2017
21:18:51
он либы не сваливает в одну, а кладет их прямо в виде jar-ок в одну jar-ку

Руслан
12.02.2017
21:19:30
например?)