11package com .blade .ioc ;
22
3+ import com .blade .ioc .annotation .Bean ;
34import com .blade .ioc .bean .BeanDefine ;
5+ import com .blade .kit .IocKit ;
6+ import com .blade .mvc .WebContext ;
47import lombok .extern .slf4j .Slf4j ;
58
69import java .util .*;
@@ -30,12 +33,12 @@ public void addBean(Object bean) {
3033 @ Override
3134 public void addBean (String name , Object bean ) {
3235 BeanDefine beanDefine = new BeanDefine (bean );
33- addBean (name , beanDefine );
34- // add interface
36+ put (name , beanDefine );
37+ // add interface、put to pool
3538 Class <?>[] interfaces = beanDefine .getType ().getInterfaces ();
3639 if (interfaces .length > 0 ) {
3740 for (Class <?> interfaceClazz : interfaces ) {
38- this .addBean (interfaceClazz .getName (), beanDefine );
41+ this .put (interfaceClazz .getName (), beanDefine );
3942 }
4043 }
4144 }
@@ -59,8 +62,21 @@ public void setBean(Class<?> type, Object proxyBean) {
5962 */
6063 @ Override
6164 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 ();
6480 }
6581
6682 @ Override
@@ -69,7 +85,7 @@ public <T> T getBean(Class<T> type) {
6985 try {
7086 return type .cast (bean );
7187 } catch (Exception e ) {
72- e . printStackTrace ( );
88+ log . error ( "get bean error" , e );
7389 }
7490 return null ;
7591 }
@@ -90,7 +106,7 @@ public List<BeanDefine> getBeanDefines() {
90106
91107 @ Override
92108 public BeanDefine getBeanDefine (Class <?> type ) {
93- return this . getBeanDefine (type , true );
109+ return pool . get (type . getName () );
94110 }
95111
96112 @ Override
@@ -129,7 +145,7 @@ public void clearAll() {
129145 /**
130146 * Add user-defined objects
131147 */
132- private void addBean (String name , BeanDefine beanDefine ) {
148+ private void put (String name , BeanDefine beanDefine ) {
133149 if (pool .put (name , beanDefine ) != null ) {
134150 log .warn ("Duplicated Bean: {}" , name );
135151 }
@@ -138,40 +154,40 @@ private void addBean(String name, BeanDefine beanDefine) {
138154 /**
139155 * Register @Bean marked objects
140156 */
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 );
143159 }
144160
145161 /**
146162 * Register @Bean marked objects
147163 */
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 );
150166
151167 if (pool .put (name , beanDefine ) != null ) {
152168 log .warn ("Duplicated Bean: {}" , name );
153169 }
154170
155- // add interface
171+ // add interface、put to pool
156172 Class <?>[] interfaces = beanClass .getInterfaces ();
157173 if (interfaces .length > 0 ) {
158174 for (Class <?> interfaceClazz : interfaces ) {
159175 if (null != this .getBean (interfaceClazz )) {
160176 break ;
161177 }
162- this .addBean (interfaceClazz .getName (), beanDefine );
178+ this .put (interfaceClazz .getName (), beanDefine );
163179 }
164180 }
165181
166- return beanDefine .getBean ();
182+ return Objects . requireNonNull ( beanDefine ) .getBean ();
167183 }
168184
169- private BeanDefine getBeanDefine (Class <?> beanClass , boolean singleton ) {
185+ private BeanDefine createBeanDefine (Class <?> beanClass , boolean isSingleton ) {
170186 try {
171187 Object object = beanClass .newInstance ();
172- return new BeanDefine (object , beanClass , singleton );
188+ return new BeanDefine (object , beanClass , isSingleton );
173189 } catch (InstantiationException | IllegalAccessException e ) {
174- e . printStackTrace ( );
190+ log . error ( "get BeanDefine error" , e );
175191 }
176192 return null ;
177193 }
0 commit comments