spring底层有很多Aware接口的实现类,Aware译为感知,实现xxxAware就可以获得xxx的类。例如我们经常使用ApplicationContextAware接口来获取spring管理的bean对象。这里介绍EmbeddedValueResolverAware的作用,通常我们使用@Value注解来获取properties文件中的值,每个类中都要使用@Value也很繁琐,实现EmbeddedValueResolverAware接口后就方便多了。
@Component //注意该类必须在ioc容器中使用,否则EmbeddedValueResolverAware不会注入进来
public class PropertiesUtil implements EmbeddedValueResolverAware {
private static StringValueResolver valueResolver;
@Override
public void setEmbeddedValueResolver(StringValueResolver resolver) {
PropertiesUtil.valueResolver = resolver;
}
public static String getValue(String key) {
//StringValueResolver还可以解析spel表达式,@Value注解能够解析的,StringValueResolver都可以解析
return valueResolver.resolveStringValue("${" + key + "}");
}
public static void main(String[] args) {
//该方式只适用于被spring接管的properties
System.out.println(PropertiesUtil.getValue("person.sex"));
}
}