springboot @Autowired注入为null

读取 application-dev.yml 文件,如果是有多个 application.yml 文件请指定路径

package com.nuctech.datasync.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:/application-dev.yml")
@ConfigurationProperties(prefix = "erpax")
public class ReadApplication {
    
    private  String driverClassName;

    public String getDriverClassName() {
        return driverClassName;
    }
 public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
}

下面是 @Autowired注入配置信息类,get属性时,出现空指针的问题。

只要加上@PostConstruct 并且 public static SyncMaterialUtil syncMaterial;

一定要public static 

@PostConstruct 
public void init() {
syncMaterial= this;
syncMaterial.read= this.read; 
}

这样加上之后,就可以就可以用  syncMaterial.read.getDriverClassName() 的方式取到。

package com.nuctech.datasync.util;

import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class SyncMaterialUtil {
    
    @Autowired
    private  ReadApplication read;

    public static SyncMaterialUtil syncMaterial;
    
    @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作
    public void init() {
        syncMaterial= this;
        syncMaterial.read= this.read;  
    }
     
    public static void main(String[] args) {
      System.out.println(syncMaterial.read.getDriverClassName());
    }
}

测试取到了application.yml的数据

原文地址:https://www.cnblogs.com/cuixiaomeng/p/13685548.html