DI & amp; Autowiring против экземпляра в Spring [дубликат]

Кажется, что -Wl, -rpath здесь не эффективен.

Вероятно, что ваш обновленный компоновщик испускает динамический тег DT_RUNPATH, в котором исходит старый компоновщик DT_RPATH. (Возможно также, что ваш старый компоновщик был GNU-ld, а новый - Gold.)

Предпочтительнее DT_RUNPATH, а также влияет на путь поиска самого двоичного файла, но не любая из зависимых библиотек.

DT_RPATH имеет глобальный эффект, подобно добавлению каталога в переменную среды LD_LIBRARY_PATH.

Вы можете проверить это с помощью: readelf -d a.out | grep 'R.*PATH'.

Если вы видите разницу RPATH против RUNPATH и фактически используете Gold, вы можете заставить «старое» поведение с -Wl,--disable-new-dtags (GNU ld также --disable-new-dtags добавлен к нему недавно, поэтому он должен работать для любого линкера).

2
задан Tomasz Nurkiewicz 20 November 2012 в 10:37
поделиться

2 ответа

В большинстве случаев вы должны пойти с инъекцией, потому что:

  • Это облегчает модульное тестирование (вы можете вводить макет или другую реализацию)
  • Spring может вставлять некоторые зависимости в MyServiceImpl, так как он управляет этим объектом
  • . Вы не связываете свой контроллер с конкретной реализацией

Даже если ваша служба не имеет интерфейса, из-за второго Причина, по которой вам следует рассмотреть инъекцию.

Единственный случай, когда вы можете пропустить Spring, - это когда класс не имеет зависимостей и не имеет апатридов. Но, скорее всего, такой класс - это утилита, которая вообще не нуждается в каком-либо экземпляре, поскольку она имеет только static членов.

3
ответ дан Tomasz Nurkiewicz 1 September 2018 в 05:26
поделиться

Это будет зависеть от того, является ли MyService bean, который имеет состояние или нет. Если MyService не имеет состояния, тогда вам не нужно создавать новые экземпляры, и вы можете позволить Spring вставить его с преимуществами, описанными выше

1
ответ дан Oscar 1 September 2018 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: