Autowiring spring bean by name using annotation

Solution 1:

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

Solution 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.

Solution 3:

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;

Solution 4:

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