Подтвердить что ты не робот

Autowiring spring bean по имени с помощью аннотации

В последней версии Springs мы можем autowire bean использовать аннотацию как @Autowired. Это будет autwire bean, используя его тип (или конструктор, если применяется на нем). Есть ли способ использовать аннотацию @Autowired на основе имени bean, которое мы делали без аннотации в XML файле Spring как autowire = "byName" ?

4b9b3361

Ответ 1

Вы можете использовать JSR-250 @Resource для автопотока bean, если вам не нужна инъекция конструктора или вставка нескольких параметров.

Из документов:

Если вы намереваетесь выражать введенную аннотацией инъекцию по имени, не используйте в основном @Autowired, даже если технически можно ссылаться на имя bean через значения @Qualifier. Вместо этого используйте аннотацию JSR-250 @Resource, которая семантически определена для идентификации конкретного целевого компонента по его уникальному имени, причем объявленный тип не имеет отношения к процессу сопоставления.

Ответ 2

Ты можешь использовать:

@Autowired
@Qualifier("beanname")

Согласно @Qualifier javadoc

Эта аннотация может использоваться в поле или параметре в качестве квалификатора для фанатов-кандидатов при автоподготовке

Ответ 3

Я использовал прокси-сервер bean, который испортил autowiring по имени. У @Resource не было этой проблемы, так как она не заботится о типе. Итак, теперь я знаю одну причину этой рекомендации разработчиками Spring:-) Just FYI

Ответ 4

Если вы хотите определить имя bean, с которым они будут зарегистрированы в контейнере DI, вы можете передать имя в самой аннотации, например. @Service ( "employeeManager" ).

Затем, используя приведенный ниже код, вы можете включить autwire по имени

@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;

Ответ 5

Используйте @Component ( "beanname" ) в определении класса java вашего bean

Затем, когда автоустановка использует JSR 330

@Inject @Named (Значение = "beanname" )