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());
		}
	}
@ 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}.
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 {