Autowiring spring bean by name using annotation

后端 未结 5 507
故里飘歌
故里飘歌 2020-12-23 09:45

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

相关标签:
5条回答
  • 2020-12-23 09:56

    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

    0 讨论(0)
  • 2020-12-23 09:57

    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

    0 讨论(0)
  • 2020-12-23 10:01

    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;
    
    0 讨论(0)
  • 2020-12-23 10:12

    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.

    0 讨论(0)
  • 2020-12-23 10:17

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

    Then while autowiring use JSR 330

    @Inject @Named(Value="beanname")

    0 讨论(0)
提交回复
热议问题