在使用一些静态方法时, 要用到一些配置文件中的数据
或者像在springboot+websocket的@OnOpen方法中无法使用@Value注入的数据时
结合网上的方法,和自己造的轮子,给出一个以不变应万变的方法.
首先写一个配置类, 将这个类交给spring管理 ,然后注入端口号
@Component
@Data
public class ConfigValue {
@Value("${server.port}")
private Integer port;
}
接着写一个spring工具类,或者找一个,百度上很多.
@Component
@Sl4j
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public SpringContextUtil() {
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) {
Object o = null;
try {
o = getApplicationContext().getBean(name);
} catch (NoSuchBeanDefinitionException var3) {
log.error(var3.getMessage());
}
return o;
}
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
return getApplicationContext().getBeansOfType(clazz);
}
public static String getEnvironmentProperty(String key) {
return getApplicationContext().getEnvironment().getProperty(key);
}
}
最后就可以用getBean方法直接获取配置类
ConfigValue configValue = SpringContextUtil.getBean(ConfigValue.class);
类都获取出来了,接下来直接configValue.getPort() 就可以获取到值了