Skip to content

Commit 8a41e53

Browse files
author
monsoon
committed
add bean Ioc support
1 parent 246d5f8 commit 8a41e53

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
}

0 commit comments

Comments
 (0)