Tip from spring documentation.
Code:
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.
but still not sure about self injection
also read
3.9 Annotation-based container configuration section in documentation in case if you have missed.