public static <T> T implementInterfaces(Object target, InvocationHandler handler) { return implement(target, handler, Cls.getImplementedInterfaces(target.getClass())); }
private void add(Object instance) { Class<?> clazz = instance.getClass(); for (Class<?> interfacee : Cls.getImplementedInterfaces(clazz)) { addProvider(interfacee, instance); } addProvider(clazz, instance); state.instances.add(instance); }
for (Class<?> interfacee : Cls.getImplementedInterfaces(clazz)) { addProvider(interfacee, classOrInstance);
private void add(Object instance) { Class<?> clazz = instance.getClass(); for (Class<?> interfacee : Cls.getImplementedInterfaces(clazz)) { addProvider(interfacee, instance); } addProvider(clazz, instance); state.instances.add(instance); }
private static <T> T proxyWrap(T instance) { Set<F3<Object, Object, Method, Object[]>> done = U.set(); for (Class<?> interf : Cls.getImplementedInterfaces(instance.getClass())) { final List<F3<Object, Object, Method, Object[]>> interceptors = INTERCEPTORS.get(interf); if (interceptors != null) { for (final F3<Object, Object, Method, Object[]> interceptor : interceptors) { if (interceptor != null && !done.contains(interceptor)) { Log.debug("Creating proxy", "target", instance, "interface", interf, "interceptor", interceptor); final T target = instance; InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return interceptor.execute(target, method, args); } }; instance = Proxies.implement(instance, handler, interf); done.add(interceptor); } } } } return instance; }
public static void register(Plugin plugin) { for (Class<?> interf : Cls.getImplementedInterfaces(plugin.getClass())) { if (Plugin.class.isAssignableFrom(interf) && !Plugin.class.equals(interf)) { String name = plugin.name(); Log.info("Registering plugin", "plugin", plugin, "name", name, "type", interf); PLUGINS.get(interf).put(name, plugin); PLUGINS_BY_NAME.put(name, plugin); } } // initial plugin configuration plugin.configure(Conf.sub(plugin.name()).toMap()); setPlugin(plugin); }
public static synchronized void manage(Object... classesOrInstances) { List<Class<?>> autocreate = new ArrayList<Class<?>>(); for (Object classOrInstance : classesOrInstances) { boolean isClass = isClass(classOrInstance); Class<?> clazz = isClass ? (Class<?>) classOrInstance : classOrInstance.getClass(); for (Class<?> interfacee : Cls.getImplementedInterfaces(clazz)) { addInjectionProvider(interfacee, classOrInstance); } if (isClass) { Log.debug("configuring managed class", "class", classOrInstance); MANAGED_CLASSES.add(clazz); if (!clazz.isInterface() && !clazz.isEnum() && !clazz.isAnnotation()) { // if the class is annotated, auto-create an instance if (clazz.getAnnotation(Autocreate.class) != null) { autocreate.add(clazz); } } } else { Log.debug("configuring managed instance", "instance", classOrInstance); addInjectionProvider(clazz, classOrInstance); MANAGED_INSTANCES.add(classOrInstance); } } for (Class<?> clazz : autocreate) { singleton(clazz); } }
for (Class<?> interfacee : Cls.getImplementedInterfaces(clazz)) { addProvider(interfacee, classOrInstance);