@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;

 

posted @ 2019-11-02 13:05  遥远2  阅读(2753)  评论(0编辑  收藏  举报