package org.sdif4j.spring;
import org.sdif4j.InjectContext;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.context.ApplicationContext;
import javax.inject.Provider;
/**
* Base Spring InjectContext implementation
*
* @author Sergey Chernov
*/
public abstract class AbstractSpringInjectContext implements InjectContext {
protected abstract ApplicationContext getContext();
public <T> Provider<T> getProvider(final Class<T> clazz) {
return new Provider<T>() {
public T get() {
return getInstance(clazz);
}
};
}
public final <T> T getInstance(Class<T> clazz) {
return getContext().getBean(clazz);
}
public final <T> T getInstance(Class<T> clazz, String name) {
return getContext().getBean(name, clazz);
}
public final void injectMembers(Object instance) {
final AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
bpp.setBeanFactory(getContext().getAutowireCapableBeanFactory());
bpp.processInjection(instance);
}
}