package com.ctrip.framework.apollo.build; import com.ctrip.framework.apollo.exceptions.ApolloConfigException; import com.ctrip.framework.apollo.internals.Injector; import com.ctrip.framework.apollo.tracer.Tracer; import com.ctrip.framework.foundation.internals.ServiceBootstrap; /** * @author Jason Song(song_s@ctrip.com) */ public class ApolloInjector { private static volatile Injector s_injector; private static Object lock = new Object(); private static Injector getInjector() { if (s_injector == null) { synchronized (lock) { if (s_injector == null) { try { s_injector = ServiceBootstrap.loadFirst(Injector.class); } catch (Throwable ex) { ApolloConfigException exception = new ApolloConfigException("Unable to initialize Apollo Injector!", ex); Tracer.logError(exception); throw exception; } } } } return s_injector; } public static <T> T getInstance(Class<T> clazz) { try { return getInjector().getInstance(clazz); } catch (Throwable ex) { Tracer.logError(ex); throw new ApolloConfigException(String.format("Unable to load instance for type %s!", clazz.getName()), ex); } } public static <T> T getInstance(Class<T> clazz, String name) { try { return getInjector().getInstance(clazz, name); } catch (Throwable ex) { Tracer.logError(ex); throw new ApolloConfigException( String.format("Unable to load instance for type %s and name %s !", clazz.getName(), name), ex); } } }