1
1
package us .codecraft .tinyioc .beans .factory ;
2
2
3
3
import us .codecraft .tinyioc .beans .BeanDefinition ;
4
+ import us .codecraft .tinyioc .beans .BeanPostProcessor ;
4
5
5
6
import java .util .ArrayList ;
6
7
import java .util .Iterator ;
@@ -17,6 +18,8 @@ public abstract class AbstractBeanFactory implements BeanFactory {
17
18
18
19
private final List <String > beanDefinitionNames = new ArrayList <String >();
19
20
21
+ private List <BeanPostProcessor > beanPostProcessors = new ArrayList <BeanPostProcessor >();
22
+
20
23
@ Override
21
24
public Object getBean (String name ) throws Exception {
22
25
BeanDefinition beanDefinition = beanDefinitionMap .get (name );
@@ -26,10 +29,26 @@ public Object getBean(String name) throws Exception {
26
29
Object bean = beanDefinition .getBean ();
27
30
if (bean == null ) {
28
31
bean = doCreateBean (beanDefinition );
32
+ initializeBean (bean , name );
29
33
}
30
34
return bean ;
31
35
}
32
36
37
+ protected void initializeBean (Object bean , String name ) throws Exception {
38
+ for (BeanPostProcessor beanPostProcessor : beanPostProcessors ) {
39
+ bean = beanPostProcessor .postProcessBeforeInitialization (bean , name );
40
+ }
41
+
42
+ // TODO:call initialize method
43
+ for (BeanPostProcessor beanPostProcessor : beanPostProcessors ) {
44
+ bean = beanPostProcessor .postProcessAfterInitialization (bean , name );
45
+ }
46
+ }
47
+
48
+ protected Object createBeanInstance (BeanDefinition beanDefinition ) throws Exception {
49
+ return beanDefinition .getBeanClass ().newInstance ();
50
+ }
51
+
33
52
public void registerBeanDefinition (String name , BeanDefinition beanDefinition ) throws Exception {
34
53
beanDefinitionMap .put (name , beanDefinition );
35
54
beanDefinitionNames .add (name );
@@ -42,12 +61,29 @@ public void preInstantiateSingletons() throws Exception {
42
61
}
43
62
}
44
63
45
- /**
46
- * 初始化bean
47
- *
48
- * @param beanDefinition
49
- * @return
50
- */
51
- protected abstract Object doCreateBean (BeanDefinition beanDefinition ) throws Exception ;
64
+ protected Object doCreateBean (BeanDefinition beanDefinition ) throws Exception {
65
+ Object bean = createBeanInstance (beanDefinition );
66
+ beanDefinition .setBean (bean );
67
+ applyPropertyValues (bean , beanDefinition );
68
+ return bean ;
69
+ }
70
+
71
+ protected void applyPropertyValues (Object bean , BeanDefinition beanDefinition ) throws Exception {
72
+
73
+ }
74
+
75
+ public void addBeanPostProcessor (BeanPostProcessor beanPostProcessor ) throws Exception {
76
+ this .beanPostProcessors .add (beanPostProcessor );
77
+ }
78
+
79
+ public List getBeansForType (Class type ) throws Exception {
80
+ List beans = new ArrayList <Object >();
81
+ for (String beanDefinitionName : beanDefinitionNames ) {
82
+ if (type .isAssignableFrom (beanDefinitionMap .get (beanDefinitionName ).getBeanClass ())) {
83
+ beans .add (getBean (beanDefinitionName ));
84
+ }
85
+ }
86
+ return beans ;
87
+ }
52
88
53
89
}
0 commit comments