@Autowired
是Spring3.0引入的注解,可以標注在類的屬性上,這樣Spring容器就會采取byType的方式來注入對應的Bean。
@Autowired private Instrument instrument;
如果Spring容器中不存在一個類型為Instrument
的Bean,那么在啟動程序的時候就會報錯:NoSuchBeanDefinitionException
。還有一種會報錯的情況,就是Spring容器中存在多個類型為(is-a)Instrument
的Bean,拋出的異常與上面一樣。因為Spring容器此時不知道該使用哪一個Bean來注入到屬性中,這是一個Fail-Fast的策略。那么如何解決存在多個相同類型的Bean的情況呢?可以使用@Qualifier
注解。
@Autowired @Qualifier("guitar") private Instrument instrument;
@Qualifier
在這里告訴Spring容器如果存在多個類型為Instrument
的Bean,那么就使用id為guitar的Bean來注入instrument
這個屬性。@Qualifier
的作用是縮小@Autowire
的范圍。