我有一个名为proxyconfig.java
的配置文件,它从yaml文件中读取并将其注入ProxyConfig.java
文件。我需要使用我的配置中的属性将其注入Httputil类来设置代理,但我得到一个空指针异常,因为它没有注入属性主机和端口来设置代理。我正在使用StaticContextAccessor访问代理配置类并获取主机和端口值。请有人协助我目前做错了吗?
@Configuration
public class ProxyConfig {
@Value("${proxy.host}")
private String host;
@Value("${proxy.port}")
private int port;
public int getPort() { return this.port; }
public int getHost() { return this.host; }
}
StaticContextAccessor类:
public class StaticContextAccessor {
private static StaticContextAccessor instance;
@Autowired
private ApplicationContext applicationContext;
@PostConstruct()
public void registerInstance() {
instance = this;
}
public static <T> T getBean(Class<T> clazz) {
return instance.applicationContext.getBean(clazz);
}
}
我的HttpUtil类:
public class Httputil {
private static RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(1000)
.setSocketTimeout(10000)
.setConnectionRequestTimeout(10000)
// setting the proxy
//causes null pointer as it cannot read host and port
.setProxy(new HttpHost(StaticContextAccessor.getBean(ProxyConfig.class).getHost(), StaticContextAccessor.getBean(ProxyConfig.class).getPort())
}
答案 0 :(得分:0)
callback=self.parse_nextfile
在此代码中private static RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(1000)
.setSocketTimeout(10000)
.setConnectionRequestTimeout(10000)
// setting the proxy
//causes null pointer as it cannot read host and port
.setProxy(new HttpHost(StaticContextAccessor.getBean(ProxyConfig.class).getHost(), StaticContextAccessor.getBean(ProxyConfig.class).getPort())
为defaultRequestConfig
,因此在加载类时会初始化它。那时:
static
实际上是一个bean,则它未初始化,因此StaticContextAccessor
为instance
。你需要重新考虑整个设计。为什么不把一切都当作Spring托管bean呢?为什么不将null
作为bean?为什么所有这些静力学?