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