public static synchronized <T> T findOrCreateInstance(final Class<T> clazz) { final T t = clazz.cast(SINGLETONS.get(clazz)); if (t != null) { return t; } return newInstance(clazz); }
public static synchronized <T> T newInstance(final Class<T> clazz) { String config = Configuration.getProperty(clazz.getName(), null); try { if (config == null) { if (clazz.isInterface()) { config = clazz.getPackage().getName() + ".Default" + clazz.getSimpleName(); } else { config = clazz.getName(); } } final T t = newInstance(clazz, config); SINGLETONS.put(clazz, t); return t; } catch (final Exception e) { throw new SironaException("Cannot find instance for class " + clazz.getName() + " with config : " // + config + " : " + e.getMessage(),e); } }
public static <T> T[] newInstances(final Class<T> api) { final String names = Configuration.getProperty(api.getName(), null); if (names == null) { return (T[]) Array.newInstance(api, 0); } final String[] split = names.split(","); final T[] array = (T[]) Array.newInstance(api, split.length); for (int i = 0; i < array.length; i++) { try { array[i] = newInstance(api, split[i]); } catch (final Exception e) { throw new SironaException(e); } } return array; }