File tree Expand file tree Collapse file tree 2 files changed +77
-0
lines changed
src/main/java/simple/xfj/framework/helper Expand file tree Collapse file tree 2 files changed +77
-0
lines changed Original file line number Diff line number Diff line change
1
+ package simple .xfj .framework .helper ;
2
+
3
+ import simple .xfj .framework .util .ReflectionUtil ;
4
+
5
+ import java .util .HashMap ;
6
+ import java .util .Map ;
7
+ import java .util .Set ;
8
+
9
+ /**
10
+ * Created by asus on 2017/4/18.
11
+ */
12
+ public class BeanHelper {
13
+
14
+ private static final Map <Class <?>,Object > beanMap = new HashMap <Class <?>, Object >();
15
+
16
+ static {
17
+ Set <Class <?>> beanSet = ClassHelper .getBeanSet ();
18
+ if (null != beanSet && beanSet .size ()>0 ){
19
+ for (Class clazz : beanSet ){
20
+ Object obj = ReflectionUtil .newInstance (clazz );
21
+ beanMap .put (clazz ,obj );
22
+ }
23
+ }
24
+ }
25
+
26
+ public static Map <Class <?>,Object > getBeanMap (){
27
+ return beanMap ;
28
+ }
29
+
30
+ public static <T > T getClassBean (Class <T > clazz ){
31
+ if (null != clazz ){
32
+ if (!beanMap .containsKey (clazz )){
33
+ throw new RuntimeException ("can not get bean by class:" +clazz .getName ());
34
+ }
35
+ return (T )beanMap .get (clazz );
36
+ }
37
+ return null ;
38
+ }
39
+ }
Original file line number Diff line number Diff line change
1
+ package simple .xfj .framework .helper ;
2
+
3
+ /**
4
+ * Created by asus on 2017/4/18.
5
+ */
6
+
7
+ import simple .xfj .framework .annotation .Autowired ;
8
+ import simple .xfj .framework .util .ReflectionUtil ;
9
+
10
+ import java .lang .reflect .Field ;
11
+ import java .util .Map ;
12
+
13
+ /**
14
+ * 将带有@Autowired的filed字段通过反射注入
15
+ */
16
+ public class IocHelper {
17
+ static {
18
+ Map <Class <?>, Object > beanMap = BeanHelper .getBeanMap ();
19
+ if (null != beanMap && beanMap .size () > 0 ){
20
+ for (Map .Entry entry : beanMap .entrySet ()){
21
+ Class clazz = (Class ) entry .getKey ();
22
+ Object instance = entry .getValue ();
23
+ Field [] fields = clazz .getDeclaredFields ();
24
+ if (null != fields && fields .length > 0 ){
25
+ for (Field field :fields ){
26
+ if (field .isAnnotationPresent (Autowired .class )){
27
+ Class <?> clazzType = field .getType ();
28
+ Object beanInject = BeanHelper .getClassBean (clazzType );
29
+ if (null != beanInject )
30
+ //通过反射设置beanfield的值
31
+ ReflectionUtil .setField (instance ,field ,beanInject );
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
You can’t perform that action at this time.
0 commit comments