|  |  | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | public class ProtocolCache { | 
 |  |  | 	 | 
 |  |  |  | 
 |  |  |    //本系统中,Driver在单线程中运行,所以只用一个实例 | 
 |  |  |    private static final HashMap<String, Driver> drivers = new HashMap<>() ; | 
 |  |  |     //注解与处理类的映射 | 
 |  |  |    //注解与处理类的映射 | 
 |  |  |    private static final HashMap<String, AnnotationDriverVo> driverMap = new HashMap<>() ; | 
 |  |  |    private static final HashMap<String, AnnotationPrefixedDataAvailableVo> prefixedDataAvailableMap = new HashMap<>() ; | 
 |  |  |    private static final HashMap<String, AnnotationOnLineVo> onLineMap = new HashMap<>() ; | 
 |  |  | 	 | 
 |  |  |  | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 在单线程环境中运行 | 
 |  |  |     * 通过协议驱动的类名,得到类单例 | 
 |  |  |     * @param protocolName 协议名称 | 
 |  |  |     * @param protocolVersion 协议版本号 | 
 |  |  |     * @return 驱动 | 
 |  |  |     * @throws Exception 异常 | 
 |  |  |     */ | 
 |  |  |    public static Driver getDriver(String protocolName) throws Exception{ | 
 |  |  |       Driver dri = drivers.get(protocolName); | 
 |  |  |    public static Driver getDriver(String protocolName, short protocolVersion) throws Exception{ | 
 |  |  |       Driver dri = drivers.get(protocolName + protocolVersion) ; | 
 |  |  |       if(dri == null){ | 
 |  |  |          AnnotationDriverVo vo = driverMap.get(protocolName) ; | 
 |  |  |          AnnotationDriverVo vo = driverMap.get(protocolName + protocolVersion) ; | 
 |  |  |          if(vo != null && vo.clazz != null){ | 
 |  |  |             dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance(); | 
 |  |  |             //dri = (Driver)vo.clazz.newInstance() ; | 
 |  |  |             drivers.put(protocolName, dri) ; | 
 |  |  |             drivers.put(protocolName + protocolVersion, dri) ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return dri ; | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |    /** | 
 |  |  |     * 在单线程环境中运行 | 
 |  |  |     * 通过协议驱动的类名,得到类单例 | 
 |  |  |     * @param protocolNameVersion 协议名称和版本号 | 
 |  |  |     * @return 驱动 | 
 |  |  |     * @throws Exception 异常 | 
 |  |  |     */ | 
 |  |  |    public static Driver getDriver(String protocolNameVersion) throws Exception{ | 
 |  |  |       Driver dri = drivers.get(protocolNameVersion) ; | 
 |  |  |       if(dri == null){ | 
 |  |  |          AnnotationDriverVo vo = driverMap.get(protocolNameVersion) ; | 
 |  |  |          if(vo != null && vo.clazz != null){ | 
 |  |  |             dri = (Driver)vo.clazz.getDeclaredConstructor().newInstance(); | 
 |  |  |             drivers.put(protocolNameVersion, dri) ; | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return dri ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 得到驱动的数量,即中间件支持的协议数量 | 
 |  |  |     * @return 驱动总数 | 
 |  |  | 
 |  |  |          return drivers.size() ; | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  | 	 | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 得到第一个驱动 | 
 |  |  |     * @return 驱动 | 
 |  |  | 
 |  |  |       return onLineMap; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /* | 
 |  |  |    public static void main(String[] args){ | 
 |  |  |       HashMap<String, Integer> mp = new HashMap<>() ; | 
 |  |  |       mp.put("a1", 1) ; | 
 |  |  |       mp.put("a2", 2) ; | 
 |  |  |       List<String> list = new ArrayList<>(mp.keySet()) ; | 
 |  |  |       System.out.println(list); | 
 |  |  |    protected AnnotationDriverVo getAnnotationDriver(String protocolName, Short protocolVersion){ | 
 |  |  |       return driverMap.get(protocolName + "" + protocolVersion) ; | 
 |  |  |    } | 
 |  |  |    */ | 
 |  |  | } | 
 |  |  |  | 
 |  |  |    protected static AnnotationPrefixedDataAvailableVo getAnnotationPrefixedDataAvailable(String protocolName, Short protocolVersion){ | 
 |  |  |       return prefixedDataAvailableMap.get(protocolName + "" + protocolVersion) ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    protected static AnnotationOnLineVo getAnnotationOnLine(String protocolName, Short protocolVersion){ | 
 |  |  |       return onLineMap.get(protocolName + "" + protocolVersion) ; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     public static void main(String[] args){ | 
 |  |  |         HashMap<String, Integer> mp = new HashMap<>() ; | 
 |  |  |         mp.put("a1", 1) ; | 
 |  |  |         mp.put("a2", 2) ; | 
 |  |  |         List<String> list = new ArrayList<>(mp.keySet()) ; | 
 |  |  |         System.out.println(list); | 
 |  |  |     } | 
 |  |  |     */ | 
 |  |  | } |