1
1
package com .blade .ioc ;
2
2
3
+ import com .blade .ioc .annotation .Bean ;
3
4
import com .blade .ioc .bean .BeanDefine ;
5
+ import com .blade .kit .IocKit ;
6
+ import com .blade .mvc .WebContext ;
4
7
import lombok .extern .slf4j .Slf4j ;
5
8
6
9
import java .util .*;
@@ -30,12 +33,12 @@ public void addBean(Object bean) {
30
33
@ Override
31
34
public void addBean (String name , Object bean ) {
32
35
BeanDefine beanDefine = new BeanDefine (bean );
33
- addBean (name , beanDefine );
34
- // add interface
36
+ put (name , beanDefine );
37
+ // add interface、put to pool
35
38
Class <?>[] interfaces = beanDefine .getType ().getInterfaces ();
36
39
if (interfaces .length > 0 ) {
37
40
for (Class <?> interfaceClazz : interfaces ) {
38
- this .addBean (interfaceClazz .getName (), beanDefine );
41
+ this .put (interfaceClazz .getName (), beanDefine );
39
42
}
40
43
}
41
44
}
@@ -59,8 +62,21 @@ public void setBean(Class<?> type, Object proxyBean) {
59
62
*/
60
63
@ Override
61
64
public <T > T addBean (Class <T > type ) {
62
- Object bean = addBean (type , true );
63
- return type .cast (bean );
65
+ Bean beanAnnotation = type .getAnnotation (Bean .class );
66
+ boolean isSingleton = null == beanAnnotation || beanAnnotation .singleton ();
67
+ if (isSingleton ) {
68
+ Object bean = put (type , true );
69
+ return type .cast (bean );
70
+ }
71
+ return null ;
72
+ }
73
+
74
+ @ Override
75
+ public Object createBean (Class <?> type ) {
76
+ BeanDefine beanDefine = createBeanDefine (type , true );
77
+ IocKit .initInjection (this , Objects .requireNonNull (beanDefine ));
78
+ IocKit .injectionValue (WebContext .blade ().environment (), beanDefine );
79
+ return beanDefine .getBean ();
64
80
}
65
81
66
82
@ Override
@@ -69,7 +85,7 @@ public <T> T getBean(Class<T> type) {
69
85
try {
70
86
return type .cast (bean );
71
87
} catch (Exception e ) {
72
- e . printStackTrace ( );
88
+ log . error ( "get bean error" , e );
73
89
}
74
90
return null ;
75
91
}
@@ -90,7 +106,7 @@ public List<BeanDefine> getBeanDefines() {
90
106
91
107
@ Override
92
108
public BeanDefine getBeanDefine (Class <?> type ) {
93
- return this . getBeanDefine (type , true );
109
+ return pool . get (type . getName () );
94
110
}
95
111
96
112
@ Override
@@ -129,7 +145,7 @@ public void clearAll() {
129
145
/**
130
146
* Add user-defined objects
131
147
*/
132
- private void addBean (String name , BeanDefine beanDefine ) {
148
+ private void put (String name , BeanDefine beanDefine ) {
133
149
if (pool .put (name , beanDefine ) != null ) {
134
150
log .warn ("Duplicated Bean: {}" , name );
135
151
}
@@ -138,40 +154,40 @@ private void addBean(String name, BeanDefine beanDefine) {
138
154
/**
139
155
* Register @Bean marked objects
140
156
*/
141
- private Object addBean (Class <?> type , boolean singleton ) {
142
- return addBean (type .getName (), type , singleton );
157
+ private Object put (Class <?> type , boolean isSingleton ) {
158
+ return put (type .getName (), type , isSingleton );
143
159
}
144
160
145
161
/**
146
162
* Register @Bean marked objects
147
163
*/
148
- private Object addBean (String name , Class <?> beanClass , boolean singleton ) {
149
- BeanDefine beanDefine = this .getBeanDefine (beanClass , singleton );
164
+ private Object put (String name , Class <?> beanClass , boolean isSingleton ) {
165
+ BeanDefine beanDefine = this .createBeanDefine (beanClass , isSingleton );
150
166
151
167
if (pool .put (name , beanDefine ) != null ) {
152
168
log .warn ("Duplicated Bean: {}" , name );
153
169
}
154
170
155
- // add interface
171
+ // add interface、put to pool
156
172
Class <?>[] interfaces = beanClass .getInterfaces ();
157
173
if (interfaces .length > 0 ) {
158
174
for (Class <?> interfaceClazz : interfaces ) {
159
175
if (null != this .getBean (interfaceClazz )) {
160
176
break ;
161
177
}
162
- this .addBean (interfaceClazz .getName (), beanDefine );
178
+ this .put (interfaceClazz .getName (), beanDefine );
163
179
}
164
180
}
165
181
166
- return beanDefine .getBean ();
182
+ return Objects . requireNonNull ( beanDefine ) .getBean ();
167
183
}
168
184
169
- private BeanDefine getBeanDefine (Class <?> beanClass , boolean singleton ) {
185
+ private BeanDefine createBeanDefine (Class <?> beanClass , boolean isSingleton ) {
170
186
try {
171
187
Object object = beanClass .newInstance ();
172
- return new BeanDefine (object , beanClass , singleton );
188
+ return new BeanDefine (object , beanClass , isSingleton );
173
189
} catch (InstantiationException | IllegalAccessException e ) {
174
- e . printStackTrace ( );
190
+ log . error ( "get BeanDefine error" , e );
175
191
}
176
192
return null ;
177
193
}
0 commit comments