diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomBean.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomBean.java index daf7e46..34d4d47 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomBean.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomBean.java @@ -36,6 +36,7 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import java.io.Serializable; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.HashSet; @@ -58,33 +59,54 @@ import javax.inject.Named; import javax.inject.Qualifier; import javax.inject.Scope; +import br.gov.frameworkdemoiselle.util.Beans; + /** * @see http://docs.jboss.org/weld/reference/latest/en-US/html_single/#d0e5035 */ -public class CustomBean implements Bean { +public class CustomBean implements Bean, Serializable { + + private static final long serialVersionUID = 1L; private Class beanClass; - private InjectionTarget injectionTarget; + private transient InjectionTarget injectionTarget; - public CustomBean(Class beanClass, BeanManager beanManager) { - AnnotatedType annotatedType = beanManager.createAnnotatedType(beanClass); + private transient BeanManager beanManager; + + private InjectionTarget getInjectionTarget() { + if (this.injectionTarget == null) { + AnnotatedType annotatedType = getBeanManager().createAnnotatedType(beanClass); + this.injectionTarget = getBeanManager().createInjectionTarget(annotatedType); + } + + return this.injectionTarget; + } + + private BeanManager getBeanManager() { + if (this.beanManager == null) { + this.beanManager = Beans.getBeanManager(); + } - this.injectionTarget = beanManager.createInjectionTarget(annotatedType); + return this.beanManager; + } + + public CustomBean(Class beanClass, BeanManager beanManager) { this.beanClass = beanClass; + this.beanManager = beanManager; } public Object create(CreationalContext creationalContext) { - Object instance = injectionTarget.produce(creationalContext); - injectionTarget.inject(instance, creationalContext); - injectionTarget.postConstruct(instance); + Object instance = getInjectionTarget().produce(creationalContext); + getInjectionTarget().inject(instance, creationalContext); + getInjectionTarget().postConstruct(instance); return instance; } public void destroy(Object instance, CreationalContext creationalContext) { - injectionTarget.preDestroy(instance); - injectionTarget.dispose(instance); + getInjectionTarget().preDestroy(instance); + getInjectionTarget().dispose(instance); creationalContext.release(); } @@ -166,6 +188,6 @@ public class CustomBean implements Bean { } public Set getInjectionPoints() { - return injectionTarget.getInjectionPoints(); + return getInjectionTarget().getInjectionPoints(); } } -- libgit2 0.21.2