@Value值為null、#和$的區別
阿新 • • 發佈:2021-07-08
獲取屬性值
在springboot中通過PropertySources註解讀取指定配置檔案
@PropertySource(value = {"classpath:env.properties"}, encoding = "utf-8")
值為null
這個屬性在env.properties中
@Value(value="${auth_bili}") private String auth_bili;
但是debug的時候這個值顯示為null
被呼叫類的上半部分是這樣子的
@Component public class BiliRequest implements Request { @Value(value="${auth_bili}") private String auth_bili; // TODO 修改建構函式 private HttpHeaders _headers; private HttpEntity<String> formEntity; private Map<String, Object> maps; private RestTemplate restTemplate; public BiliRequest(){ restTemplate = new RestTemplate(); } ......
而呼叫這個類所生成的被呼叫類的例項用的是new biliRequest(),這一步導致@Value註解失效
應該在呼叫類中這麼寫
@Service(value = "ContentManagementService") public class ContentManagementServiceImpl implements ContentManagementService { @Resource private UrlFactory urlFactory; @Resource private BiliRequest biliRequest; ......
不用new關鍵字,使用註解,通過spring框架的方式例項化,而不是jvm層面的例項化
在網上查到的@Value的其他原因
- 呼叫類類沒有加上@Component(或者@service等)
- 用static或者final修飾
睜開眼,書在面前 閉上眼,書在心裡