@Override
	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		Class mc = method.getDeclaringClass();
		log.trace("intercept method : " + method);
		
		if (mc.equals(Object.class)) { //调用的是Object的方法
			return method.invoke(this, args);
		}
		
		//是Feature
		if (InputStreamFeature.class.isAssignableFrom(mc) && !mc.equals(InputStreamFeature.class)) {
			Object delegate = featuresMap.get(mc);
			
			//找到
			if (delegate != null) {
				return method.invoke(delegate, args);
			}
			
			//如InputStreamProxySource
			if (mc.isAssignableFrom(InputStreamFeatureDelegate.class)) {
				return method.invoke(this, args);
			}
			
			//寻找是否有子类注册
			for (Class<? extends InputStreamFeature> clazz : getFeatures().keySet().toArray(new Class[0])) {
				if (mc.isAssignableFrom(clazz) && featuresMap.get(clazz) != null) {
					return method.invoke(featuresMap.get(clazz), args);
				}
			}
		}
		return method.invoke(this.lastDelegateObject, args);
	}