jakarta.enterprise.inject.spi.CDI Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jakarta.enterprise.cdi-api Show documentation
Show all versions of jakarta.enterprise.cdi-api Show documentation
APIs for CDI (Contexts and Dependency Injection for Java)
The newest version!
/*
* Copyright 2013, 2015, Red Hat, Inc., and individual contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jakarta.enterprise.inject.spi;
import java.util.Collections;
import java.util.Comparator;
import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.TreeSet;
import jakarta.enterprise.inject.Instance;
/**
* Provides access to the current container.
*
*
* CDI implements {@link Instance} and therefore might be used to perform programmatic lookup.
* If no qualifier is passed to {@link #select} method, the @Default
qualifier is assumed.
*
*
*
* @author Pete Muir
* @author Antoine Sabot-Durand
* @author John D. Ament
* @since 1.1
* @param type inherited from {@link Instance}. Always Object for CDI
*/
public abstract class CDI implements Instance {
private static final Object lock = new Object();
private static volatile boolean providerSetManually = false;
/** The set of discovered CDIProviders */
protected static volatile Set discoveredProviders = null;
/** {@link CDIProvider} set by user or retrieved by service loader */
protected static volatile CDIProvider configuredProvider = null;
/**
*
* Get the CDI instance that provides access to the current container.
*
*
*
* If there are no providers available, an {@link IllegalStateException} is thrown, otherwise the first provider which can
* access the container is used.
*
*
* @throws IllegalStateException if no {@link CDIProvider} is available
* @return the CDI instance
*/
public static CDI