powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение spring beans в классе, неуправляемом spring
25 сообщений из 113, страница 2 из 5
Получение spring beans в классе, неуправляемом spring
    #39950430
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если развивать идеи Роберта Мартина то в каментах нужно писать только то что НЕВОЗМОЖНО
описать кодом. Я обычно в каментах пишу о намерениях например выкосить этот код в будущем.

Кстати у Бугаенко были тоже интересные идеи в части понимания кода.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950441
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На одном из проектов часто приходилось разбираться с чужим кодом

Обычно проблема не с "что делает это код", а самое главное "зачем он это делает и нахрена вообще все это было надо"
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950504
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
На одном из проектов часто приходилось разбираться с чужим кодом

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

Да. Вот еще одно интересное наблюдение. С связи с SingleResponsibility каждый компонент должен
делать 1 узкую задачу. Но этих простых компонентов - тыщи. Каждый из них - как кирпичик LEGO
сам по себе не несет особого смысла. Но будучи собранными в кучу - они представляют какой-то смысл.
И получается что JavaDoc должен описиывать не SingleResp-class, на некий агрегат или композит
из множества компонентов.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950521
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton

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


И тут мы приходим к ситуации, когда в сервисе spring создается объект, ктр. для решения своих задач создает свои объекты и т.д. И там где-то далеко в этой куче понадобится доступ к какому-нибудь сервису spring. И что делать? Как обратиться к spring? Это я к теме топика.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950524
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bob1970
mayton

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


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

Я не совсем понял суть проблемы. В Спринг приложении ты в любой момент можешь дернуть глобальный объект
контекста и получить в руке то что надо.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950577
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton

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

Согласен. Но как-то некрасиво. Решение с ктр начался топик этим и не нравится. Подсказали @Configurable. Похоже на правду. Очень похоже. Надо только посмотреть как в тестах будет выглядеть. Вроде бы нормально на первый взгляд. Детально не смотрел еще.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950613
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bob1970

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

Что это за такие объекты, что из них надо дергать спринг? Если так происходит, то что-то не то со структурой проекта. Можешь на пальцах показать пример? - возможно легче все порефакторить, чем тащить @Configurable
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950621
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это как из С++ вызывать Python который снова вызывает С++.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950654
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan,
Можно и на примерах. Только толку ноль, свалимся в холивар "Spring головного мозга"/"Вы не умеете его готовить". И мне не нужно решать какой-то конкретный use-case. Я бы немного шире взял.
Что мы пишем в Service? Бизнес логику. Какое-то поведение решаем созданием объектов. Но далеко от сервиса не уходим, т.к. там все зависимости. Держим все время в голове, что сервис это одиночка, без состояния. С учетом этих ограничений часто пишем логику в самом сервисе. Он становится жирным, забиваем на single-responsibility. Да, я в курсе про слои и т.п.
Тесты отдельная песня. Зачем то поднимаем SpringRunner, боремся с ним, тесты тормозят.
Представь другую схему. Создавай объекты какие хочешь. Его созданием, поведением сам рулишь. Он может быть и не одиночка, и доступен GC. А этому объекту вдруг понадобиться доступ к например репозиторию.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950672
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на примерах - нельзя пояснить то наверное что-то туго с обоснованием.

Объясняющий или стесняется своей архитектуры, или сам ее не понимает
но просто верит, ибо много кода написано да и привычка. Сильная вещь.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950673
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950747
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

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

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


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

bob1970

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


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

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

bob1970

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


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

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

Там изменишь в одном месте, а у тебя все приложение стает колом.
Нужно разделять поведение.
И тут либо через if-чики. Или глубокий рефакторинг.
Т.к. if-чик это быстро.
То потом после 3-5 поколений программистов видишь объект на 10000 строк if-ов в одном методе.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39950855
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul

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

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


Это не правда про "тяжёлое" поднятие контекста. Вы просто не умеете его готовить )
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951008
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered
mad_nazgul

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

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


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



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

Код: java
1.
2.
3.
4.
5.
6.
public class test {
  @Test
  public void test() {
    assertEquals(2+2, 4) 
  }
}



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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@SpringBootTest
@RunWith(SpringTunner.class)
public class test {
  @Test
  public void test() {
    assertEquals(2+2, 4) 
  }
}



<:o)
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951749
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал оценить производительность

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
@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.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951765
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое отношение имеет яндекс к теме топика? Чьорт вась побери...
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951769
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Яндекс.Танк бесплатный инструмент нагрузочного тестирования. По ссылке просто результаты тестов.
Результаты
Впрочем уже не важно. Метод работает без потери производительности. Пользоваться можно.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951775
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На фига здесь лишний интерфейс IServiceForFree ?? Это же не, прости госпади, EJB 2.1, где интерфейсы надо было на каждый чих создавать.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39951783
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unregestered
На фига здесь лишний интерфейс IServiceForFree ?? Это же не, прости госпади, EJB 2.1, где интерфейсы надо было на каждый чих создавать.

Вот это по нашему, по бразильски. Да нафига нужны все эти интерфейсы?
:)
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39952007
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куча быдлкодеров перешло с EJB на спринг и начинают копировать ужасные EJB практики там, где это нафиг не нужно.

FizzBuzz Enterprise Edition
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39952020
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что у разработчиков Node - вообще таких проблем нет?

Складывается впечатление что им открыто - истинное буддийское знание.
А мы (java-исты) - как лохи позорные?...
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39955634
bob1970
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unregestered
На фига здесь лишний интерфейс IServiceForFree ?? Это же не, прости госпади, EJB 2.1, где интерфейсы надо было на каждый чих создавать.


Не сразу дошел смысл этого комментария. А смысл прост. Не создавать интерфейс, если предполагается единственная реализация. Полностью согласен. В данном абстрактном примере хотел подчеркнуть, что это какая-то спринговая зависимость.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39955677
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея овер-инжинернига описана в статье на хабре https://habr.com/en/post/113128/

К сожалению в Spring заходят новички которых сразу учат длинным реализациям.
Думаю что через лет 5 такого учения они будут уже не в состоянии написать простой
код. Такая проф-деформация специфичная именно для Spring-сегмента.
...
Рейтинг: 0 / 0
Получение spring beans в классе, неуправляемом spring
    #39955811
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Идея овер-инжинернига описана в статье на хабре https://habr.com/en/post/113128/

К сожалению в Spring заходят новички которых сразу учат длинным реализациям.
Думаю что через лет 5 такого учения они будут уже не в состоянии написать простой
код. Такая проф-деформация специфичная именно для Spring-сегмента.


Ну типичный карго-культ.
Просто учатся по "делай как я", не задавая вопросы.
Имхо это все же лучше, чем класс на 10 000 строк с методом содержащим "if else if" на 5000 - 7000 строк. :-)
...
Рейтинг: 0 / 0
25 сообщений из 113, страница 2 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Получение spring beans в классе, неуправляемом spring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]