@Override
	protected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, TpURL tpURL, Invocation invocation) {

		int weight = 0;
		for (Invoker<T> invoker : invokers) {
			weight += this.getWeight(invoker, invocation);
		}

		int factor = random.nextInt(weight);
		for (Invoker<T> invoker : invokers) {
			weight = weight - this.getWeight(invoker, invocation);
			if (weight < factor) {
				return invoker;
			}
		}
		return invokers.get(random.nextInt(invokers.size()));
	}