package com.jackson.reservoir; import com.jackson.net.RequestConfig; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import org.apache.http.client.methods.HttpRequestBase; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.HashMap; /** * Created by Jackson on 2016/11/7. * Post参数设置对象都是单例存储的。 */ public class RequestConfigPool<T extends HttpRequestBase> { private static Logger logger = LogManager.getLogger(RequestConfigPool.class.getName()); private HashMap<String,RequestConfig<T>> pool; public RequestConfigPool(){ pool = new HashMap<>(); } public RequestConfig<T> getRequestConfig(Class<? extends RequestConfig> clzz){ RequestConfig requestConfig = pool.get(clzz.getName()); if(requestConfig ==null){ requestConfig = newInstance(clzz); if(requestConfig ==null){ logger.error("解析PostConfig错误 PostConfigClassName{}",clzz.getName()); throw new RuntimeException("解析PostConfig错误 PostConfigClassName:"+clzz.getName()); } else pool.put(clzz.getName(), requestConfig); } logger.debug("获取PostConfig className:{}",clzz.getName()); return requestConfig; } private RequestConfig newInstance(Class<? extends RequestConfig> clzz){ logger.debug("创建新的PostConfig className:{},当前PostConfig数量为{}",clzz.getName(),pool.size()); RequestConfig requestConfig = null; try{ requestConfig = clzz.newInstance(); } catch (IllegalAccessException e) { logger.error(e.toString()); } catch (InstantiationException e) { logger.error(e.toString()); } finally { return requestConfig; } } }