src/main/java/js/container/Container.java
@SuppressWarnings("unchecked")
	public void start() {
		log.trace("start()");

		// classes pool is not sorted; it is a hash map for performance reasons
		// also, a managed class may appear multiple times if have multiple interfaces
		// bellow sorted set is used to ensure ascending order on managed classes instantiation
		// comparison is based on managed class key that is created incrementally

		Set<ManagedClassSPI> sortedClasses = new TreeSet<>(new Comparator<ManagedClassSPI>() {
			@Override
			public int compare(ManagedClassSPI o1, ManagedClassSPI o2) {
				// compare first with second to ensure ascending sorting
				return o1.getKey().compareTo(o2.getKey());
			}
		});

		for (ManagedClassSPI managedClass : classesPool.values()) {
			if (managedClass.isAutoInstanceCreation()) {
				sortedClasses.add(managedClass);
			}
			// process only implementations of managed life cycle interface
			// if (Types.isKindOf(managedClass.getImplementationClass(), ManagedLifeCycle.class)) {
			// sortedClasses.add(managedClass);
			// }
		}

		for (ManagedClassSPI managedClass : sortedClasses) {
			// call getInstance to ensure managed instance with managed life cycle is started
			// if there are more than one single interface peek one, no matter which; the simple way is to peek the first
			// getInstance() will create instance only if not already exist; returned value is ignored

			log.debug("Create managed instance with managed life cycle |%s|.", managedClass.getInterfaceClass());
			getInstance((Class<? super Object>) managedClass.getInterfaceClass());
		}
	}
@SuppressWarnings("unchecked")
	public void start() {
		log.trace("start()");

		// classes pool is not sorted; it is a hash map for performance reasons
		// also, a managed class may appear multiple times if have multiple interfaces
		// bellow sorted set is used to ensure ascending order on managed classes instantiation
		// comparison is based on managed class key that is created incrementally

		Set<ManagedClassSPI> sortedClasses = new TreeSet<>(new Comparator<ManagedClassSPI>() {
			@Override
			public int compare(ManagedClassSPI o1, ManagedClassSPI o2) {
				// compare first with second to ensure ascending sorting
				return o1.getKey().compareTo(o2.getKey());
			}
		});

		for (ManagedClassSPI managedClass : classesPool.values()) {
			if (managedClass.isAutoInstanceCreation()) {
				sortedClasses.add(managedClass);
			}
			// process only implementations of managed life cycle interface
			// if (Types.isKindOf(managedClass.getImplementationClass(), ManagedLifeCycle.class)) {
			// sortedClasses.add(managedClass);
			// }
		}

		for (ManagedClassSPI managedClass : sortedClasses) {
			// call getInstance to ensure managed instance with managed life cycle is started
			// if there are more than one single interface peek one, no matter which; the simple way is to peek the first
			// getInstance() will create instance only if not already exist; returned value is ignored

			log.debug("Create managed instance with managed life cycle |%s|.", managedClass.getInterfaceClass());
			getInstance((Class<? super Object>) managedClass.getInterfaceClass());
		}
	}
Ensure all managed classes with managed life cycle are instantiated. Invoked at a final stage of container initialization
this method checks every managed class that implements {@link ManagedLifeCycle} interface and ensure is instantiated.
<p>
Takes care to instantiate, configure if the case, and execute post-construct in the order from application descriptor.
This is critical for assuring that {@link App} is created first; {@link App} class descriptor is declared first into
application descriptor.
<p>
Note that this method does not explicitly execute {@link ManagedLifeCycle#postConstruct()} hooks; this hooks are actually
executed by instance processor, see {link {@link PostConstructInstanceProcessor}.