code: private void doWithThreadContextClassLoader(ClassLoader classLoader, Runnable code) {
  		ClassLoader existingLoader = (classLoader != null)
  				? ClassUtils.overrideThreadContextClassLoader(classLoader) : null;
  		try {
  			code.run();
  		}
  		finally {
  			if (existingLoader != null) {
  				ClassUtils.overrideThreadContextClassLoader(existingLoader);
  			}
  		}
  	}
docs: Some older Servlet frameworks (e.g. Struts, BIRT) use the Thread context class
  loader to create servlet instances in this phase. If they do that and then try to
  initialize them later the class loader may have changed, so wrap the call to
  loadOnStartup in what we think its going to be the main webapp classloader at
  runtime.
  @param classLoader the class loader to use
  @param code the code to run