src/main/java/js/container/Container.java
@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