@Resource


優先級:

首先,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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM