1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.cdi.impl;
20
21 import org.apache.myfaces.cdi.util.CDIUtils;
22 import org.apache.myfaces.spi.InjectionProvider;
23 import org.apache.myfaces.spi.InjectionProviderException;
24
25 import javax.enterprise.context.spi.CreationalContext;
26 import javax.enterprise.inject.spi.AnnotatedType;
27 import javax.enterprise.inject.spi.BeanManager;
28 import javax.enterprise.inject.spi.InjectionTarget;
29 import javax.faces.context.ExternalContext;
30
31
32
33
34
35 public class CDIAnnotationInjectionProvider extends InjectionProvider
36 {
37 private BeanManager beanManager;
38
39 public CDIAnnotationInjectionProvider(ExternalContext externalContext)
40 {
41 beanManager = CDIUtils.getBeanManager(externalContext);
42 }
43
44 @Override
45 public Object inject(Object instance) throws InjectionProviderException
46 {
47 AnnotatedType annoType = beanManager.createAnnotatedType(instance.getClass());
48 InjectionTarget target = beanManager.createInjectionTarget(annoType);
49 CreationalContext<?> creationalContext = beanManager.createCreationalContext(null);
50
51 target.inject(instance, creationalContext);
52
53 return creationalContext;
54 }
55
56 @Override
57 public void postConstruct(Object instance, Object creationMetaData) throws InjectionProviderException
58 {
59 AnnotatedType annoType = beanManager.createAnnotatedType(instance.getClass());
60 InjectionTarget target = beanManager.createInjectionTarget(annoType);
61 target.postConstruct(instance);
62 }
63
64 @Override
65 public void preDestroy(Object instance, Object creationMetaData) throws InjectionProviderException
66 {
67 if (creationMetaData instanceof CreationalContext)
68 {
69 AnnotatedType annoType = beanManager.createAnnotatedType(instance.getClass());
70 InjectionTarget target = beanManager.createInjectionTarget(annoType);
71 target.preDestroy(instance);
72
73 ((CreationalContext)creationMetaData).release();
74 }
75 }
76 }