1. 程式人生 > >springboot @vaule註解失效解決辦法

springboot @vaule註解失效解決辦法

zed 便在 pub one div sync lose 方法 問題

在Controller類裏面通過@Value將參數註入進來,最後的確成功了。因此基於此經驗,我便在其他使用的類裏面也采用這樣的方式註入參數,但是發現去失效了,報錯為NULL,說明參數並沒有我們料想的被註入進來。

原因 這是為什麽呢?為什麽在Controller類就成功了?在其他類裏面我嘗試過@Service,@Component,@Configure,但是我沒有成功,經過查詢,原來,在使用這些參數生成Bean類的時候,我們註入的參數還沒有生效,因此獲取不到,而不是由於參數註入的問題,而在某些場景,spring可能做了優化,是的參數優先註入,再生成Bean。那麽有沒有好的方法可以解決這個問題呢? 方案 首先,我們的參數的直接註入是肯定不行了,那麽我們就采用初始化類的方式,將配置信息集中初始化。

import lombok.extern.slf4j.Slf4j;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 為bean類提前註入屬性
 */
@Slf4j
public class PropertyUtil {

    private static Properties props;

    static {
        loadProps();
    }

    
synchronized static private void loadProps() { log.info("start to load properties......."); props = new Properties(); InputStream in = null; try { in = PropertyUtil.class.getClassLoader(). getResourceAsStream("application.properties"); props.load(in); log.info(
""); } catch (FileNotFoundException e) { log.error("properties not found!"); } catch (IOException e) { log.error("IOException"); } finally { try { if (null != in) { in.close(); } } catch (IOException e) { log.error("properties close Exception!"); } } // logger.info(props); log.info("load properties over..........."); } public static String getProperty(String key) { if (null == props) { loadProps(); } return props.getProperty(key); } }

使用方法:

 private static String reqIp = PropertyUtil.getProperty("reqIp");

springboot @vaule註解失效解決辦法