在非spring bean里读取properties代替@Val

2021-10-21  本文已影响0人  lfboo

在spring bean中,我们一般使用@Value来读取配置文件中的property, 但如果想在非spring bean中读取property,可以使用这里提供的一种方法:

@Component
public class PropertiesUtils implements EmbeddedValueResolverAware {
    private static StringValueResolver stringValueResolver;

    @Override
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        PropertiesUtils.stringValueResolver = stringValueResolver;
    }

    public static String getPropertyValue(String propertyName) {
        String finalPropertyName = "${"+propertyName+"}";
        return PropertiesUtils.stringValueResolver.resolveStringValue(finalPropertyName);
    }
}

这里借助EmbeddedValueResolverAware,拿到StringValueResolver, 这里需要注意的点是 要查的propertyName须是${xxx}这种格式的,@Value的实现也是基于StringValueResolver

public class TestPropertiesTest {
    public static void main(String[] args) {
        String str = PropertiesUtils.getPropertyValue("test.name");
        System.out.println(str);
    }
}
上一篇下一篇

猜你喜欢

热点阅读