spring@value註入配置文件值失敗的原因分析

spring@value註入配置文件值失敗的原因

今天我寫瞭一個system.propertities配置文件定義瞭一個變量host=localhost。

然後在spring 配置文件中加入瞭加載配置

在service中這樣寫

@Value("${host}")
private static String host;

但是獲取不到,各種查資料,最後發現是static關鍵字的原因

spring@Value依賴註入是依賴set方法

set方法是普通的對象方法,static變量是類的屬性,沒有set方法;

spring配置文件@Value註解註入失敗或為null

在spring使用@Value從application.properties將值註入到變量中時,遇到

瞭註入失敗和註入值為null兩種問題。

解決方案

1、查看maven依賴,

(如果生效,可不進行後續步驟)

2、加入註釋@PropertySource(value = “classpath:/application.properties”)配置文件路徑。

(如果生效,可不進行後續步驟)

3、將被註入變量作為構造方法參數進行輸入。

代碼示例

maven依賴

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>

config類

@Configuration
//聲明properties文件位置
@PropertySource(value = "classpath:/application.properties")
public class DemoConfig {
    private String name;
    //將@Value作為構造函數參數註入
    public DemoConfig(@Value("${book.name}") String name){
        this.name = name;
    }
    public void output(){
        System.out.println(name);
    }
}

main

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
//        SpringApplication.run(DemoApplication.class, args);
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(DemoConfig.class);
        DemoConfig service = context.getBean(DemoConfig.class);
        service.output();
    }
}

問題解析

1、spring版本問題,根據本人實驗,4.x以下版本會出現一些註入問題。

2、沒有寫@PropertySource(value = “classpath:/application.properties”)註解,或路徑不對。

3、.properties文件沒有放在resources文件夾中。

問題拓展

1、除瞭springboot自帶的application.properties文件外,可以自己創建test.properties,導入其他自創屬性,並管理屬性。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: