В последней версии Springs мы можем autowire bean использовать аннотацию как @Autowired
. Это будет autwire bean, используя его тип (или конструктор, если применяется на нем).
Есть ли способ использовать аннотацию @Autowired
на основе имени bean, которое мы делали без аннотации в XML файле Spring как autowire = "byName" ?
Autowiring spring bean по имени с помощью аннотации
Ответ 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" )