package org.sdif4j;
import com.google.inject.ImplementedBy;
import org.sdif4j.guice.GuiceInjectContext;
import javax.inject.Provider;
/**
* Inject DI encapsulation class.
* <p/>
* In Guice DI by default implemented by {@code org.sdif4j.guice.GuiceInjectContext}
* (no additional binding required, auto-bound with @ImplementedBy annotation).
* <p/>
* In Spring DI by default implemented by {@code org.sdif4j.spring.SpringInjectContext}
* ("org.sdif4j.spring" auto-scan required or simply add
* <import resource="classpath:spring-sdif4j-context.xml"/> to your context.xml).
* <p/>
* In Java EE CDI by default implemented by {@code org.sdif4j.cdi.CdiInjectContext}
* (no additional binding required, auto-bound with @Default annotation)
* <p/>
* General notice: when feasible, do not use this class and it's methods,
* use javax.inject.* annotations instead.
*
* @author Sergey Chernov
*/
// note, that this is GuiceInjectContext from sdif4j-guice-stub, not sdif4j-guice, just for compilation.
// it's a hack for default binding and ability to separate maven modules without cyclic dependency.
// that's why it can be highlighted in your IDE
@ImplementedBy(GuiceInjectContext.class)
public interface InjectContext {
/**
* Attribute name for Context binding, e.g. ServletContext
*/
public static final String CONTEXT_ATTRIBUTE = InjectContext.class.getName();
/**
* Get class instance Provider via DI implementation.
*
* @param clazz
* @param <T>
* @return class instance Provider
*/
public <T> Provider<T> getProvider(Class<T> clazz);
/**
* Get class instance via DI implementation.
*
* @param clazz
* @param <T>
* @return class instance
*/
public <T> T getInstance(Class<T> clazz);
/**
* Get class named instance via DI implementation.
* In general, naming is bound with @javax.inject.Named annotation
*
* @param clazz
* @param <T>
* @return named class instance
*/
public <T> T getInstance(Class<T> clazz, String name);
/**
* Inject instance members
*
* @param instance
*/
public void injectMembers(Object instance);
}