springboot @Value获取绝对路径文件的内容
默认情况下使用
@Value("aaa.txt") private Resource txtResource;
这样获取到的是项目classpath 下的 aaa.txt
如果想获取非项目路径下的文件内容怎么办呢,看了下@Value的好像也没有说,
其实
@Value("https://www.baidu.com") private Resource urlResource;
这样是可以获取到 百度首页的内容的.它这里使用的是https协议.
同样的我们可以使用file协议获取文本的内容
即:
@Value("file:///E://aaa.txt") private Resource txtResource;
使用@Value 有一个好处就是,你不用关心文本内容的变化,你每次调用的时候,springboot 会自动帮你重新加载.
Spring注解@Value解读
主要通过源码解读来分析@Value实现属性注入Spring Bean的过程,并对static类型字段无法通过@Value注入为Spring Bean依赖的原因做一个探究。
依赖注入概述
基于Spring MVC或者Spring Boot开发后端项目的时候总是绕不开Spring本文来源gao($daima.com搞@代@#码$网 IOC容器,Spring IOC容器管理Spring Bean,我们可以通过XML或者注解的方式来定义一个Bean,如通过注解@Service,@Controller,@Component,@Repository或者@Bean加Java配置方式。实际应用中我们定义的一个Bean很多时候存在互相之间的依赖,比如Service层通过@Service定义的Bean往往要依赖数据库DAO层通过@Repository定义的Bean,这时候我们往往通过@Autowired或@Resource来自动装配,另外还有一些Bean内部的属性(Field)需要通过配置文件中定义的值来设置,而后创建的Bean才是符合我们预期的,我们一般通过@Value和@ConfigurationProperties来实现属性的注入。
实际应用案例
以文档管理服务为例,我们有个资源上传的接口,其依赖一个FeignClient客户端Bean,一个业务逻辑处理的Service Bean,还依赖一个资源上传的OSS的桶bucket成员变量,bucket和OSS我们通常配置在配置文件中以区分不同环境。具体的依赖关系如下图: