package com.github.wangxuehui.rpc.snrpc.util; import java.util.HashMap; import java.util.Map; /** * @author skyim E-mail:wxh64788665@gmail.com * 类说明 */ public class HandlerMapper { public static Map<String,Object> getHandlerMap(Object... handlers){ if(null==handlers||handlers.length==0){ throw new IllegalArgumentException("handlers not provided"); } HashMap<String,Object> handlerMap = new HashMap<String,Object>(); //handlers传入的是实现类 for(Object handler : handlers){ //实现类实现了哪些接口? Class<?>[] interfaces = handler.getClass().getInterfaces(); for(Class<?> iface : interfaces){ //接口名称 String interfaceName = iface.getName(); if(ignore(interfaceName)){ continue; } //接口名称-->实现类 if(null != handlerMap.put(interfaceName, handler)){ throw new IllegalArgumentException("more than one handler for the interface [" + interfaceName + "]"); } } } return handlerMap; } private static boolean ignore(String interfaceName){ if(interfaceName.startsWith("java.")){ return true; } if(interfaceName.startsWith("javax.")){ return true; } if(interfaceName.startsWith("sun.")){ return true; } if(interfaceName.startsWith("com.sun.")){ return true; } return false; } }