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

时间:2017-06-28 04:57:37

标签: java spring-mvc spring-boot proxy yaml

我有一个名为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())
    }

1 个答案:

答案 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,因此在加载类时会初始化它。那时:

  1. Spring未初始化
  2. 如果static实际上是一个bean,则它未初始化,因此StaticContextAccessorinstance
  3. 你需要重新考虑整个设计。为什么不把一切都当作Spring托管bean呢?为什么不将null作为bean?为什么所有这些静力学?

相关问题