Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: Получение spring beans в классе, неуправляемом spring  [new]
unregestered
Member

Откуда:
Сообщений: 478
mad_nazgul

Если переписывать с легаси (JavaEE) на Spring, то тогда имеет смысл переписывать на SpringBoot и микросервисы.
Так что опять фреймворки не будут пересекаться .


Вы чо там курите то вообще, лол.

Spring Boot = Spring + некоторый набор автоконфигурационных бинов + bootloader.

А микросервисы это вообще не фреймворк и не библиотека, а архитектурный паттерн.
23 апр 20, 10:37    [22121248]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Мне кажется вся история фреймворков последних 20 лет - это история человеческих амбиций.
Тоесть сначала ставится некая амбициозная цель. Она как-то достигается. Потом приходят другие
люди и говорят - это всё было - гуано и мы насетапим свой фреймворк лучше.

А критерий лучше - это как можно более непохоже на то что было. Вот таким вот бесмысленным
итеративным процессом рождаются фреймворки чтобы через 3-5 лет их идея снова и снова
повторилась еще раз. Причем каждый новый фреймворк навязывает еще и религиозные идеи.
И адепты этих идей не похожи на инженеров. А больше похожи на этих мальчиков с узко
посаженными глазками которые в подземных переходах раздают книжки типа Свидетелей
Иеговы или Кришнаитов
. И не дай бох вам начать с ними спорить....
23 апр 20, 10:46    [22121251]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
unregestered
Member

Откуда:
Сообщений: 478
Ну к спрингу это не относится, спринг появился 16 лет назад и точно переживёт ещё сотню, другую, фреймворков.
Все существующие ,так называемые, "альтернативы" просто не могут соревноваться с ним по объёму фич и зрелости.

Сообщение было отредактировано: 23 апр 20, 10:57
23 апр 20, 10:56    [22121258]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Ну с back все более менее стабильно и понятно.

А вот с фронтом... Ойой. Вот кто из фронтовиков скажет сколько фреймворков хотя-бы 80%
рынка покрывают. Наверное за сотню названий зайдет.
23 апр 20, 11:05    [22121266]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
lleming
Member

Откуда:
Сообщений: 1718
Zzz79
так как в наших проектах полностью отсуствует джва док)


привет коллега
23 апр 20, 12:58    [22121346]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Если развивать идеи Роберта Мартина то в каментах нужно писать только то что НЕВОЗМОЖНО
описать кодом. Я обычно в каментах пишу о намерениях например выкосить этот код в будущем.

Кстати у Бугаенко были тоже интересные идеи в части понимания кода.
23 апр 20, 13:14    [22121366]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8552
На одном из проектов часто приходилось разбираться с чужим кодом

Обычно проблема не с "что делает это код", а самое главное "зачем он это делает и нахрена вообще все это было надо"
23 апр 20, 13:25    [22121386]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Leonid Kudryavtsev
На одном из проектов часто приходилось разбираться с чужим кодом

Обычно проблема не с "что делает это код", а самое главное "зачем он это делает и нахрена вообще все это было надо"

Да. Вот еще одно интересное наблюдение. С связи с SingleResponsibility каждый компонент должен
делать 1 узкую задачу. Но этих простых компонентов - тыщи. Каждый из них - как кирпичик LEGO
сам по себе не несет особого смысла. Но будучи собранными в кучу - они представляют какой-то смысл.
И получается что JavaDoc должен описиывать не SingleResp-class, на некий агрегат или композит
из множества компонентов.
23 апр 20, 14:39    [22121458]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
mayton

Да. Вот еще одно интересное наблюдение. С связи с SingleResponsibility каждый компонент должен
делать 1 узкую задачу. Но этих простых компонентов - тыщи. Каждый из них - как кирпичик LEGO
сам по себе не несет особого смысла. Но будучи собранными в кучу - они представляют какой-то смысл.
И получается что JavaDoc должен описиывать не SingleResp-class, на некий агрегат или композит
из множества компонентов.


И тут мы приходим к ситуации, когда в сервисе spring создается объект, ктр. для решения своих задач создает свои объекты и т.д. И там где-то далеко в этой куче понадобится доступ к какому-нибудь сервису spring. И что делать? Как обратиться к spring? Это я к теме топика.

Сообщение было отредактировано: 23 апр 20, 15:03
23 апр 20, 15:03    [22121479]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
bob1970
mayton

Да. Вот еще одно интересное наблюдение. С связи с SingleResponsibility каждый компонент должен
делать 1 узкую задачу. Но этих простых компонентов - тыщи. Каждый из них - как кирпичик LEGO
сам по себе не несет особого смысла. Но будучи собранными в кучу - они представляют какой-то смысл.
И получается что JavaDoc должен описиывать не SingleResp-class, на некий агрегат или композит
из множества компонентов.


И тут мы приходим к ситуации, когда в сервисе spring создается объект, ктр. для решения своих задач создает свои объекты и т.д. И там где-то далеко в этой куче понадобится доступ к какому-нибудь сервису spring. И что делать? Как обратиться к spring? Это я к теме топика.

Я не совсем понял суть проблемы. В Спринг приложении ты в любой момент можешь дернуть глобальный объект
контекста и получить в руке то что надо.
23 апр 20, 15:07    [22121482]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
mayton

Я не совсем понял суть проблемы. В Спринг приложении ты в любой момент можешь дернуть глобальный объект
контекста и получить в руке то что надо.

Согласен. Но как-то некрасиво. Решение с ктр начался топик этим и не нравится. Подсказали @Configurable. Похоже на правду. Очень похоже. Надо только посмотреть как в тестах будет выглядеть. Вроде бы нормально на первый взгляд. Детально не смотрел еще.

Сообщение было отредактировано: 23 апр 20, 16:10
23 апр 20, 16:11    [22121545]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
SpringMan
Member

Откуда:
Сообщений: 166
bob1970

И тут мы приходим к ситуации, когда в сервисе spring создается объект, ктр. для решения своих задач создает свои объекты и т.д. И там где-то далеко в этой куче понадобится доступ к какому-нибудь сервису spring. И что делать? Как обратиться к spring? Это я к теме топика.

Что это за такие объекты, что из них надо дергать спринг? Если так происходит, то что-то не то со структурой проекта. Можешь на пальцах показать пример? - возможно легче все порефакторить, чем тащить @Configurable
23 апр 20, 17:08    [22121587]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Ну это как из С++ вызывать Python который снова вызывает С++.
23 апр 20, 17:16    [22121597]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
SpringMan,
Можно и на примерах. Только толку ноль, свалимся в холивар "Spring головного мозга"/"Вы не умеете его готовить". И мне не нужно решать какой-то конкретный use-case. Я бы немного шире взял.
Что мы пишем в Service? Бизнес логику. Какое-то поведение решаем созданием объектов. Но далеко от сервиса не уходим, т.к. там все зависимости. Держим все время в голове, что сервис это одиночка, без состояния. С учетом этих ограничений часто пишем логику в самом сервисе. Он становится жирным, забиваем на single-responsibility. Да, я в курсе про слои и т.п.
Тесты отдельная песня. Зачем то поднимаем SpringRunner, боремся с ним, тесты тормозят.
Представь другую схему. Создавай объекты какие хочешь. Его созданием, поведением сам рулишь. Он может быть и не одиночка, и доступен GC. А этому объекту вдруг понадобиться доступ к например репозиторию.
23 апр 20, 18:31    [22121641]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Если на примерах - нельзя пояснить то наверное что-то туго с обоснованием.

Объясняющий или стесняется своей архитектуры, или сам ее не понимает
но просто верит, ибо много кода написано да и привычка. Сильная вещь.
23 апр 20, 19:17    [22121661]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
Привет из 2013
23 апр 20, 19:17    [22121662]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
chpasha
Member

Откуда:
Сообщений: 9207
bob1970
Привет из 2013

во я дерзкий был

P. S. жалко Блажкович пропал
23 апр 20, 23:05    [22121765]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
bob1970
SpringMan,
Можно и на примерах. Только толку ноль, свалимся в холивар "Spring головного мозга"/"Вы не умеете его готовить". И мне не нужно решать какой-то конкретный use-case. Я бы немного шире взял.
Что мы пишем в Service? Бизнес логику. Какое-то поведение решаем созданием объектов. Но далеко от сервиса не уходим, т.к. там все зависимости. Держим все время в голове, что сервис это одиночка, без состояния. С учетом этих ограничений часто пишем логику в самом сервисе. Он становится жирным, забиваем на single-responsibility. Да, я в курсе про слои и т.п.


Ну как бы решение предлагают во всяких книжках по TDD. :-)
Если придерживаться данной методологии разработки, то по заверениям, такого не будет.
Сейчас я себя "тренирую" не использовать аннотации для создание компонентов в Spring, только в классе конфигураций.
И все внедрения зависимостей делать через конструктор.

bob1970

Тесты отдельная песня. Зачем то поднимаем SpringRunner, боремся с ним, тесты тормозят.


Да - поднятие контекста тяжелая вещь.
Но она нужна не для всех тестов, а только которые тестируют поведение всего приложения.
Для остального должны использоваться юнит-тесты. Как минимум в теории.

Но т.к. большинству лень, то обычно поднимают весь контекст, чтобы протестировать что "2+2 == 4".

bob1970

Представь другую схему. Создавай объекты какие хочешь. Его созданием, поведением сам рулишь. Он может быть и не одиночка, и доступен GC. А этому объекту вдруг понадобиться доступ к например репозиторию.


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

Я и с такими приложениями сталкивался....

Там изменишь в одном месте, а у тебя все приложение стает колом.
Нужно разделять поведение.
И тут либо через if-чики. Или глубокий рефакторинг.
Т.к. if-чик это быстро.
То потом после 3-5 поколений программистов видишь объект на 10000 строк if-ов в одном методе.
24 апр 20, 06:25    [22121818]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
unregestered
Member

Откуда:
Сообщений: 478
mad_nazgul

Да - поднятие контекста тяжелая вещь.
Но она нужна не для всех тестов, а только которые тестируют поведение всего приложения.
Для остального должны использоваться юнит-тесты. Как минимум в теории.

Но т.к. большинству лень, то обычно поднимают весь контекст, чтобы протестировать что "2+2 == 4".


Это не правда про "тяжёлое" поднятие контекста. Вы просто не умеете его готовить )
24 апр 20, 10:37    [22121898]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
unregestered
mad_nazgul

Да - поднятие контекста тяжелая вещь.
Но она нужна не для всех тестов, а только которые тестируют поведение всего приложения.
Для остального должны использоваться юнит-тесты. Как минимум в теории.

Но т.к. большинству лень, то обычно поднимают весь контекст, чтобы протестировать что "2+2 == 4".


Это не правда про "тяжёлое" поднятие контекста. Вы просто не умеете его готовить )



Это смотря с чем сранивать.
Как минимум

public class test {
  @Test
  public void test() {
    assertEquals(2+2, 4) 
  }
}


быстрее исполняется чем

@SpringBootTest
@RunWith(SpringTunner.class)
public class test {
  @Test
  public void test() {
    assertEquals(2+2, 4) 
  }
}


<:o)
24 апр 20, 14:28    [22122117]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
Zzz79
Member

Откуда:
Сообщений: 168
Leonid Kudryavtsev,
вот это золотые слова)

ты сидишь смотришь на код и думаешь накой хер оно тут и зачем ))
24 апр 20, 20:59    [22122348]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
Попробовал оценить производительность

@RestController
@RequestMapping("/test")
public class EchoCtrl {
    private static final Logger LOG= LoggerFactory.getLogger(EchoCtrl.class);

    @Autowired
    IServiceForFree serviceForFree;

    @GetMapping(value = "echo") //tag_static
    public SimpleEntity get(@RequestParam(required = false) String name) {
        return new SimpleEntity(name);
    }

    @GetMapping(value = "dynamic") //tag_dynamic
    public SimpleEntity getDynamic(@RequestParam(required = false) String name) {
        // бин с динамически подключаемым сервисом спринга
        DynamicEntity dynamicEntity = new DynamicEntity(); 
        return dynamicEntity.getSimpleEntity(name);
    }

    @GetMapping(value = "spring") //tag_spring
    public String getSpringBean(@RequestParam(required = false) String name) {
        return serviceForFree.getVal(name);
    }
}

@Service
public class ServiceForFree implements IServiceForFree {

    @Override
    public String getVal(String input) {
        return "modified " + input;
    }
}

@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = true)
public class DynamicEntity {
    @Autowired
    IServiceForFree serviceForFree;

    public SimpleEntity getSimpleEntity(String val) {
        return new SimpleEntity(serviceForFree.getVal(val));
    }
}

public class SimpleEntity {
    private String name;

    public SimpleEntity(@NotNull String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}


Результаты Яндекс.Танк 1000 запросов, 10 сек

Получается вполне можно пользоваться @Configurable.

Сообщение было отредактировано: 26 апр 20, 17:48
26 апр 20, 17:44    [22123183]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Какое отношение имеет яндекс к теме топика? Чьорт вась побери...
26 апр 20, 19:01    [22123218]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
bob1970
Member

Откуда: Пермь
Сообщений: 217
mayton,
Яндекс.Танк бесплатный инструмент нагрузочного тестирования. По ссылке просто результаты тестов.
Результаты
Впрочем уже не важно. Метод работает без потери производительности. Пользоваться можно.

Сообщение было отредактировано: 26 апр 20, 19:15
26 апр 20, 19:14    [22123225]     Ответить | Цитировать Сообщить модератору
 Re: Получение spring beans в классе, неуправляемом spring  [new]
unregestered
Member

Откуда:
Сообщений: 478
На фига здесь лишний интерфейс IServiceForFree ?? Это же не, прости госпади, EJB 2.1, где интерфейсы надо было на каждый чих создавать.
26 апр 20, 19:54    [22123242]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Java Ответить