Autowiring Spring Bean by Name Using Annotation

In Springs latest version, we can autowire a bean using annotation as @Autowired. This will autowire the bean using its type(or constructor, if applied on it). Is there any way I can use the @Autowired annotation based on the bean name which we were doing without annotation in Spring's XML file as autowire="byName"?

5 Answers

You can use:

@Autowired
@Qualifier("beanname")

According to the @Qualifier javadoc

This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring

2

You can use JSR-250 @Resource for by-name bean autowiring, unless you need constructor injection or multi-parameter method injection.

From the docs:

If you intend to express annotation-driven injection by name, do not primarily use @Autowired, even if is technically capable of referring to a bean name through @Qualifier values. Instead, use the JSR-250 @Resource annotation, which is semantically defined to identify a specific target component by its unique name, with the declared type being irrelevant for the matching process.

If you want to define name of the bean with which they will be registered in DI container, you can pass the name in annotation itself e.g. @Service (“employeeManager”).

Then using below code you can enable autowire by Name

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

I was using bean name proxy which was messing up autowiring by name. @Resource didn't have that issue since it doesn't care about type. So now I know one reason for this recommendation by Spring developers :-) Just FYI

1

Use @Component("beanname") in the java class definition of your bean

Then while autowiring use JSR 330

@Inject @Named(Value="beanname")

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Elena Rostova

Elena Rostova

Lead Health, Wellness & Medical Journalist

Elena Rostova holds a Master's degree in Public Health Journalism. She covers groundbreaking medical research, holistic wellness trends, mental health awareness, and nutritional science.

Share this article
Twitter Facebook Pinterest