Commit da970e933179bcc5bedeb1144587188601631b9f
1 parent
4cef0dd9
Exists in
master
Ajuste na Serialização do CustomBean
Showing
1 changed file
with
33 additions
and
11 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomBean.java
| ... | ... | @@ -36,6 +36,7 @@ |
| 36 | 36 | */ |
| 37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
| 38 | 38 | |
| 39 | +import java.io.Serializable; | |
| 39 | 40 | import java.lang.annotation.Annotation; |
| 40 | 41 | import java.lang.reflect.Type; |
| 41 | 42 | import java.util.HashSet; |
| ... | ... | @@ -58,33 +59,54 @@ import javax.inject.Named; |
| 58 | 59 | import javax.inject.Qualifier; |
| 59 | 60 | import javax.inject.Scope; |
| 60 | 61 | |
| 62 | +import br.gov.frameworkdemoiselle.util.Beans; | |
| 63 | + | |
| 61 | 64 | /** |
| 62 | 65 | * @see http://docs.jboss.org/weld/reference/latest/en-US/html_single/#d0e5035 |
| 63 | 66 | */ |
| 64 | -public class CustomBean implements Bean<Object> { | |
| 67 | +public class CustomBean implements Bean<Object>, Serializable { | |
| 68 | + | |
| 69 | + private static final long serialVersionUID = 1L; | |
| 65 | 70 | |
| 66 | 71 | private Class<Object> beanClass; |
| 67 | 72 | |
| 68 | - private InjectionTarget<Object> injectionTarget; | |
| 73 | + private transient InjectionTarget<Object> injectionTarget; | |
| 69 | 74 | |
| 70 | - public CustomBean(Class<Object> beanClass, BeanManager beanManager) { | |
| 71 | - AnnotatedType<Object> annotatedType = beanManager.createAnnotatedType(beanClass); | |
| 75 | + private transient BeanManager beanManager; | |
| 76 | + | |
| 77 | + private InjectionTarget<Object> getInjectionTarget() { | |
| 78 | + if (this.injectionTarget == null) { | |
| 79 | + AnnotatedType<Object> annotatedType = getBeanManager().createAnnotatedType(beanClass); | |
| 80 | + this.injectionTarget = getBeanManager().createInjectionTarget(annotatedType); | |
| 81 | + } | |
| 82 | + | |
| 83 | + return this.injectionTarget; | |
| 84 | + } | |
| 85 | + | |
| 86 | + private BeanManager getBeanManager() { | |
| 87 | + if (this.beanManager == null) { | |
| 88 | + this.beanManager = Beans.getBeanManager(); | |
| 89 | + } | |
| 72 | 90 | |
| 73 | - this.injectionTarget = beanManager.createInjectionTarget(annotatedType); | |
| 91 | + return this.beanManager; | |
| 92 | + } | |
| 93 | + | |
| 94 | + public CustomBean(Class<Object> beanClass, BeanManager beanManager) { | |
| 74 | 95 | this.beanClass = beanClass; |
| 96 | + this.beanManager = beanManager; | |
| 75 | 97 | } |
| 76 | 98 | |
| 77 | 99 | public Object create(CreationalContext<Object> creationalContext) { |
| 78 | - Object instance = injectionTarget.produce(creationalContext); | |
| 79 | - injectionTarget.inject(instance, creationalContext); | |
| 80 | - injectionTarget.postConstruct(instance); | |
| 100 | + Object instance = getInjectionTarget().produce(creationalContext); | |
| 101 | + getInjectionTarget().inject(instance, creationalContext); | |
| 102 | + getInjectionTarget().postConstruct(instance); | |
| 81 | 103 | |
| 82 | 104 | return instance; |
| 83 | 105 | } |
| 84 | 106 | |
| 85 | 107 | public void destroy(Object instance, CreationalContext<Object> creationalContext) { |
| 86 | - injectionTarget.preDestroy(instance); | |
| 87 | - injectionTarget.dispose(instance); | |
| 108 | + getInjectionTarget().preDestroy(instance); | |
| 109 | + getInjectionTarget().dispose(instance); | |
| 88 | 110 | creationalContext.release(); |
| 89 | 111 | } |
| 90 | 112 | |
| ... | ... | @@ -166,6 +188,6 @@ public class CustomBean implements Bean<Object> { |
| 166 | 188 | } |
| 167 | 189 | |
| 168 | 190 | public Set<InjectionPoint> getInjectionPoints() { |
| 169 | - return injectionTarget.getInjectionPoints(); | |
| 191 | + return getInjectionTarget().getInjectionPoints(); | |
| 170 | 192 | } |
| 171 | 193 | } | ... | ... |