public boolean register(Object provider, Map<Class<?>, Integer> contracts) { if (provider.getClass() == Class.class) { if (isRegistered((Class<?>)provider)) { LOG.warning("Provider class " + ((Class<?>)provider).getName() + " has already been registered"); return false; } provider = createProvider((Class<?>)provider); } if (isRegistered(provider)) { LOG.warning("Provider " + provider.getClass().getName() + " has already been registered"); return false; } if (!contractsValid(provider, contracts)) { return false; } Map<Class<?>, Integer> metadata = providers.get(provider); if (metadata == null) { metadata = new HashMap<>(); providers.put(provider, metadata); } for (Entry<Class<?>, Integer> entry : contracts.entrySet()) { if (entry.getKey().isAssignableFrom(provider.getClass())) { metadata.put(entry.getKey(), entry.getValue()); } } return true; }
@Override public <T> Object create(Class<T> cls) { final Set<Bean<?>> candidates = beanManager.getBeans(cls); final Bean<?> bean = beanManager.resolve(candidates); if (bean != null) { final CreationalContext<?> context = beanManager.createCreationalContext(bean); if (!beanManager.isNormalScope(bean.getScope())) { beanManager.fireEvent(new DisposableCreationalContext(context)); } return beanManager.getReference(bean, cls, context); } else { // No CDI bean available, falling back to default instantiation strategy return ConfigurationImpl.createProvider(cls); } } }
@Override public <T> Object create(Class<T> cls) { final Set<Bean<?>> candidates = beanManager.getBeans(cls); final Bean<?> bean = beanManager.resolve(candidates); if (bean != null) { final CreationalContext<?> context = beanManager.createCreationalContext(bean); if (!beanManager.isNormalScope(bean.getScope())) { beanManager.fireEvent(new DisposableCreationalContext(context)); } return beanManager.getReference(bean, cls, context); } else { // No CDI bean available, falling back to default instantiation strategy return ConfigurationImpl.createProvider(cls); } } }
public ConfigurationImpl(Configuration parent) { if (parent != null) { this.props.putAll(parent.getProperties()); this.runtimeType = parent.getRuntimeType(); Set<Class<?>> providerClasses = new HashSet<>(parent.getClasses()); for (Object o : parent.getInstances()) { if (!(o instanceof Feature)) { registerParentProvider(o, parent); } else { Feature f = (Feature)o; features.put(f, parent.isEnabled(f)); } providerClasses.remove(o.getClass()); } for (Class<?> cls : providerClasses) { registerParentProvider(createProvider(cls), parent); } } }