package org.framework.helper;
import org.framework.annotation.Inject;
import org.framework.util.ArrayUtil;
import org.framework.util.CollectionUtil;
import org.framework.util.ReflectionUtil;
import java.lang.reflect.Field;
import java.util.Map;
/**
* 依赖注入助手类 用于Inject
* Created by lizhaoz on 2015/12/16.
*/
public final class IocHelper {
static {
Map<Class<?>,Object> beanMap=BeanHelper.getBeanMap();
if(CollectionUtil.isNotEmpty(beanMap)){
//遍历BeanMap
for(Map.Entry<Class<?>,Object> beanEntry :beanMap.entrySet()){
//从BeanMap得到Bean类和Bean实例
Class<?> beanClass =beanEntry.getKey();
Object beanInstance=beanEntry.getValue();
//获取Bean类定义的所有成员变量
Field[] beanFields=beanClass.getDeclaredFields();
if(ArrayUtil.isNotEmpty(beanFields)){
//遍历成员变量
for (Field beanField:beanFields){
//判断当前Bean Field是否带有Inject注解
if(beanField.isAnnotationPresent(Inject.class)){
//得到Bean Field的实例类
Class<?> beanFieldClass=beanField.getType();
Object beanFieldInstance=beanMap.get(beanFieldClass);
if(beanFieldInstance !=null){
//通过反射初始化值
ReflectionUtil.setField(beanInstance, beanField, beanFieldInstance);
}
}
}
}
}
}
}
}