優先級:
首先,byName
其次,byType
最后,Qualifier
使用於
setter和字段 注入
示例1:by name
@Configuration public class ApplicationContextTestResourceNameType { @Bean(name="namedFile") public File namedFile() { File namedFile = new File("namedFile.txt"); return namedFile; } } @SpringBootTest class ResourceTest { @Resource(name="namedFile") private File defaultFile; @Test public void test1() { assertNotNull(defaultFile); assertEquals("namedFile.txt",defaultFile.getName()); } }
示例2:by type
只需修改ResourceTest.java中的代碼:
@Resource private File defaultFile;
將@Resource中的name=namedFile去掉,也能成功。因為,上例中File類型的對象只有nameFile,所以可以使用by type。
示例3:by qualifier
如果有多個相同類型的對象時,
@Configuration public class ApplicationContextTestResourceNameType { @Bean(name="defaultFile") public File defaultFile() { File namedFile = new File("defaultFile.txt"); return namedFile; } @Bean(name="namedFile") public File namedFile() { File namedFile = new File("namedFile.txt"); return namedFile; } }
如果還只使用@Resource就會報錯:
No qualifying bean of type 'java.io.File' available: expected single matching bean but found 2: defaultFile,namedFile
解決方法1:追加@Qualifier
@Resource @Qualifier("defaultFile") private File file1; @Resource @Qualifier("namedFile") private File file2;
解決方法2:屬性命名跟@Bean后的的name取值一致。
@Resource private File defaultFile; @Resource private File namedFile;