日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

注入工具類

張軍 2586 0
package zj.reflect.util;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

import zj.reflect.bean.AutowiredBeanFormMap;
import zj.reflect.bean.AutowiredMapFormBean;

/**
 * 類名 :AutowiredUtil<br>
 * 概況 :注入工具類<br>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link  <a target=_blank href="http://www.sfpk123.com">張軍個(gè)人網(wǎng)站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
 */
public class AutowiredUtil implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 從Map注入Bean
	 * 
	 * @param objInstance
	 * @param map
	 */
	public static void setBeanFromMap(Map<String, Object> map, Object objInstance) throws Exception {
		if (map == null || objInstance == null) {
			throw new Exception("map或objInstance未賦值");
		} else {
			Map<Method, Object> methodsMap = MethodUtil.getMethodsMap(objInstance);
			for (Method method : methodsMap.keySet()) {
				// 取得方法上的注解
				if (method.isAnnotationPresent(AutowiredBeanFormMap.class)) {
					// 取得注解類
					AutowiredBeanFormMap ann = method.getAnnotation(AutowiredBeanFormMap.class);
					if (ann != null && (method.isAccessible() || Modifier.isPublic(method.getModifiers()))) {
						Object methodValue = null;
						// 如果有注解并且可訪問或者是公共方法
						// 獲取方法名
						String methodName = method.getName();
						// 獲取屬性的注解key
						String keyValue = ann.key();
						if (keyValue == null || keyValue.trim().equals("")) {
							// 如果方法以set開頭
							if (methodName.startsWith("set")) {
								if (methodName.length() > 3) {
									// 如果非set方法
									String fieldName = methodName.substring(3);
									// 獲取方法對應(yīng)的屬性名
									fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
									// 根據(jù)屬性名獲取map中的值
									methodValue = map.get(fieldName);
									if (methodValue != null) {
										// 如果map中的值存在,則設(shè)置方法值
										MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
									}
								} else {
									// 如果是set方法
									// 獲取map中的值
									methodValue = map.get(methodName);
									if (methodValue != null) {
										// 如果map中的值存在,則設(shè)置方法值
										MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
									}
								}
							} else {
								// 獲取map中的值
								methodValue = map.get(methodName);
								if (methodValue != null) {
									// 如果map中的值存在,則設(shè)置方法值
									MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
								}
							}
						} else {
							// 如果注解的key存在
							// 根據(jù)注解的key獲取map中的值
							methodValue = map.get(keyValue);
							// 設(shè)置map中的值到類的方法中
							MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
						}
					}
				}
			}
			// 取得屬性值
			Map<Field, Object> fieldsMap = FieldUtil.getFieldsMap(objInstance, true);
			for (Field field : fieldsMap.keySet()) {
				// 取得屬性上的注解
				if (field.isAnnotationPresent(AutowiredBeanFormMap.class)) {
					// 取得注解類
					AutowiredBeanFormMap ann = field.getAnnotation(AutowiredBeanFormMap.class);
					if (ann != null) {
						// 獲取注解中的key
						String keyValue = ann.key();
						String fieldName = field.getName();
						if (keyValue == null || keyValue.trim().equals("")) {
							// 根據(jù)屬性名獲取map中的值
							FieldUtil.set(objInstance, fieldName, true, map.get(fieldName));
						} else {
							// 根據(jù)注解的key獲取map中的值
							FieldUtil.set(objInstance, fieldName, true, map.get(keyValue));
						}
					}
				}
			}
		}
	}

	/**
	 * 從Bean注入到Map
	 * 
	 * @param objInstance
	 * @param map
	 */
	public static Map<String, Object> getMapFromBean(Object objInstance) throws Exception {
		Map<String, Object> map = null;
		if (objInstance == null) {
			throw new Exception("objInstance未賦值");
		} else {
			map = new HashMap<String, Object>();
			Map<Method, Object> methodsMap = MethodUtil.getMethodsMap(objInstance);
			for (Method method : methodsMap.keySet()) {
				Object methodValue = methodsMap.get(method);
				// 取得方法上的注解
				if (method.isAnnotationPresent(AutowiredMapFormBean.class)) {
					// 取得方法上的注解
					AutowiredMapFormBean ann = method.getAnnotation(AutowiredMapFormBean.class);
					if (ann != null && Modifier.isPublic(method.getModifiers())) {
						// 如果注解存在
						String keyValue = ann.key();
						if (keyValue == null || keyValue.trim().equals("")) {
							String methodName = method.getName();
							if (methodName.startsWith("get")) {
								if (methodName.startsWith("get") && methodName.length() > 3) {
									String fieldName = methodName.substring(3);
									fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
									map.put(fieldName, methodValue);
								} else {
									map.put(methodName, methodValue);
								}
							} else {
								map.put(methodName, methodValue);
							}
						} else {
							map.put(keyValue, methodValue);
						}
					}
				}
			}
			Map<Field, Object> fieldsMap = FieldUtil.getFieldsMap(objInstance, true);
			for (Field field : fieldsMap.keySet()) {
				Object fieldValue = fieldsMap.get(field);
				if (field.isAnnotationPresent(AutowiredMapFormBean.class)) {
					AutowiredMapFormBean ann = field.getAnnotation(AutowiredMapFormBean.class);
					if (ann != null) {
						String keyValue = ann.key();
						if (keyValue == null || keyValue.trim().equals("")) {
							String fieldName = field.getName();
							map.put(fieldName, fieldValue);
						} else {
							map.put(keyValue, fieldValue);
						}
					}
				}
			}
		}
		return map;
	}
}



更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 新龙县| 泰和县| 西林县| 兴城市| 柯坪县| 鹤岗市| 海门市| 保康县| 桦南县| 卓资县| 镇雄县| 射洪县| 丰县| 峨山| 南江县| 通许县| 凉山| 秭归县| 济阳县| 贵南县| 彝良县| 普兰县| 胶州市| 鄯善县| 额尔古纳市| 鄂托克前旗| 嘉义县| 绥滨县| 张北县| 临漳县| 贵溪市| 开原市| 扎兰屯市| 金山区| 遂昌县| 承德市| 金沙县| 安仁县| 德钦县| 武汉市| 肇州县|