@Override
	public <T> T getInstance(Class<? super T> interfaceClass, Object... args) {
		Params.notNull(interfaceClass, "Interface class");

		ManagedClassSPI managedClass = classesPool.get(interfaceClass);
		if (managedClass == null) {
			throw new BugError("No managed class associated with interface class |%s|.", interfaceClass);
		}

		InstanceKey instanceKey = new InstanceKey(managedClass.getKey());
		return getInstance(managedClass, instanceKey, args);
	}
@Override
	public <T> T getInstance(Class<? super T> interfaceClass, Object... args) {
		Params.notNull(interfaceClass, "Interface class");

		ManagedClassSPI managedClass = classesPool.get(interfaceClass);
		if (managedClass == null) {
			throw new BugError("No managed class associated with interface class |%s|.", interfaceClass);
		}

		InstanceKey instanceKey = new InstanceKey(managedClass.getKey());
		return getInstance(managedClass, instanceKey, args);
	}
@ Override public < T > T getInstance ( Class < ? super T > interfaceClass , Object ... args ) { Params . notNull ( interfaceClass , "Interface class" ) ; ManagedClassSPI managedClass = classesPool . get ( interfaceClass ) ; if ( managedClass == null ) { throw new BugError ( "No managed class associated with interface class |%s|." , interfaceClass ) ; } InstanceKey instanceKey = new InstanceKey ( managedClass . getKey ( ) ) ; return getInstance ( managedClass , instanceKey , args ) ; }
INSTANCE RETRIEVAL ALGORITHM
INSTANCE RETRIEVAL ALGORITHM