in src/main/java/com/microsoft/azure/functions/worker/broker/JavaFunctionBroker.java [159:179]
private void initializeFunctionInstanceInjector() {
ClassLoader prevContextClassLoader = Thread.currentThread().getContextClassLoader();
try {
//ServiceLoader will use thread context classloader to verify loaded class
Thread.currentThread().setContextClassLoader(classLoaderProvider.createClassLoader());
Iterator<FunctionInstanceInjector> iterator = ServiceLoader.load(FunctionInstanceInjector.class).iterator();
if (iterator.hasNext()) {
this.functionInstanceInjector = iterator.next();
WorkerLogManager.getSystemLogger().info("Load function instance injector: " + this.functionInstanceInjector.getClass().getName());
if (iterator.hasNext()){
WorkerLogManager.getSystemLogger().warning("Customer function app has multiple FunctionInstanceInjector implementations.");
throw new RuntimeException("Customer function app has multiple FunctionInstanceInjector implementations");
}
}else {
this.functionInstanceInjector = newInstanceInjector();
WorkerLogManager.getSystemLogger().info("Didn't find any function instance injector, creating function class instance every invocation.");
}
} finally {
Thread.currentThread().setContextClassLoader(prevContextClassLoader);
}
}