可能有人会想springBoot读取配置文件的方式不都有了吗,不管@Value注解或者Environment都可以获取到配置文件信息。何必大费周章自己搞个工具类。
不晓得有没有同学遇到过这些场景,在一个没有被spring管理的类里使用容器中的bean对象,是没办法是通过注解去依赖注入的,只能通过自定义ApplicationContext工具通过调用getBean方法获取。
同样的在没有被spring管理的类里是没办法使用注解的,所以就需要我们自己去实现一个工具类
工具类如下:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class PropertyConfigurer extends PropertyPlaceholderConfigurer {
private static Map<String, String> propertyMap;
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
super.processProperties(beanFactoryToProcess, props);
propertyMap = new HashMap<>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
String value = props.getProperty(keyStr);
propertyMap.put(keyStr, value);
}
}
private static void check(String key) throws IllegalArgumentException {
if (!containsKey(key)) {
throw new IllegalArgumentException("not configured: " + key);
}
}
/**
* 判断属性名是否存在
* @param key
* @return
*/
public static boolean containsKey(String key) {
return propertyMap.containsKey(key);
}
/**
* 根据属性名获取字符串类型属性值
* @param name
* @return
*/
@SuppressWarnings("unchecked")
public static String getString(String name) {
check(name);
return propertyMap.get(name);
}
/**
* 根据属性名获取数字类型属性值
* @param name
* @return
*/
public static Integer getInt(String name) {
return Integer.parseInt(getString(name));
}
/**
* 根据属性名获取布尔类型属性值
* @param name
* @return
*/
public static Boolean getBoolean(String name) {
return Boolean.parseBoolean(getString(name));
}
/**
* 根据属性名获取指定类型属性值
* @param name
* @param defaultValue
* @return
* @param <T>
*/
@SuppressWarnings("unchecked")
public static <T> T getProperty(String name, T defaultValue) {
if (propertyMap.containsKey(name)) {
return (T) propertyMap.get(name);
} else {
return defaultValue;
}
}
}