@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