package org.jboss.as.weld.injection; import java.io.Serializable; import java.util.Map; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.InjectionTarget; import org.jboss.as.weld.logging.WeldLogger; import org.jboss.weld.bean.ManagedBean; /** * @author Stuart Douglas */ class WeldInjectionContext implements Serializable { private final CreationalContext<?> context; private final Bean<?> bean; private final boolean delegateProduce; //the following fields are transient, as they are only needed at creation time, //and should not be needed after injection is complete private final transient InjectionTarget injectionTarget; private final transient Map<Class<?>, InjectionTarget> interceptorInjections; WeldInjectionContext(CreationalContext<?> ctx, final Bean<?> bean, final boolean delegateProduce, final InjectionTarget injectionTarget, final Map<Class<?>, InjectionTarget> interceptorInjections) { this.context = ctx; this.bean = bean; this.delegateProduce = delegateProduce; this.injectionTarget = injectionTarget; this.interceptorInjections = interceptorInjections; } /** * Runs CDI injection on the instance. This should be called after resource injection has been performed */ public void inject(Object instance) { injectionTarget.inject(instance, context); } public Object produce() { if (delegateProduce && bean instanceof ManagedBean) { return ((ManagedBean) bean).getInjectionTarget().produce(context); } else { return injectionTarget.produce(context); } } public void injectInterceptor(Object instance) { final InjectionTarget injection = interceptorInjections.get(instance.getClass()); if (injection != null) { injection.inject(instance, context); } else { throw WeldLogger.ROOT_LOGGER.unknownInterceptorClassForCDIInjection(instance.getClass()); } } public CreationalContext<?> getContext() { return context; } public InjectionTarget getInjectionTarget() { return injectionTarget; } public void release() { context.release(); } }