首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用springboot框架将配置注入静态方法时出现空指针异常

尝试使用springboot框架将配置注入静态方法时出现空指针异常
EN

Stack Overflow用户
提问于 2017-06-28 12:57:37
回答 1查看 578关注 0票数 0

我有一个名为proxyconfig.java的配置文件,它读取yaml文件并将其注入到ProxyConfig.java文件中。我需要使用配置中的属性将其注入到Httputil类中来设置代理,但是我得到了一个空指针异常,因为它没有注入属性host和port来设置代理。我使用StaticContextAccessor访问代理配置类并获取主机和端口值。有没有人能帮我解决一下我现在做错了什么?

代码语言:javascript
复制
@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类:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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())
    }
EN

回答 1

Stack Overflow用户

发布于 2017-06-28 15:11:49

代码语言:javascript
复制
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())

在这段代码中,defaultRequestConfigstatic,所以它在装入类时被初始化。在这点上:

  1. 未初始化如果StaticContextAccessor实际上是一个bean,则它未初始化,因此instance为bean

你需要重新考虑整个设计。为什么不把所有东西都作为Spring托管bean呢?为什么不使用defaultRequestConfig作为bean呢?为什么会有这么多静态数据呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44793945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档