@kotlin_lang

Страница 37 из 982
Руслан
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
в 5.0 будет точнее
а когда 5.0 выйлет?

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
когда и java9
А если еще раз отложат? :D

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

А если еще раз отложат? :D
Ну у них какой то план Б есть.

Выпустить RC2 например

Руслан
12.02.2017
20:46:42
я про то что если ты напишешь class C(val a: A, val b: B) в ваакуме - то магии не будет, надо класс проаннотировать всё равно что бы туда инжектнулось
Ну я же вроде ясно сказал, что можно вместо аннотаций писать в конфиге. А так понятно что спринг не догадается что вон там лежит бин, в вакууме

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
Вот, Руслан дело говорит

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
у Guice разве не компонент скан?
нет конечно, по дефолту там модули, в модулях биндинги и все в общем-то

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

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

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

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" видимо это делает за меня

?

Руслан
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-ку

но shadow просто разворачивает все в один джар, и тогда не нужно это
ну да, это причины для бесконечного чила проблем

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

Страница 37 из 982