亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

注入工具類

張軍 2199 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.eyofj.com">張軍個人網站</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);
									// 獲取方法對應的屬性名
									fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
									// 根據屬性名獲取map中的值
									methodValue = map.get(fieldName);
									if (methodValue != null) {
										// 如果map中的值存在,則設置方法值
										MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
									}
								} else {
									// 如果是set方法
									// 獲取map中的值
									methodValue = map.get(methodName);
									if (methodValue != null) {
										// 如果map中的值存在,則設置方法值
										MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
									}
								}
							} else {
								// 獲取map中的值
								methodValue = map.get(methodName);
								if (methodValue != null) {
									// 如果map中的值存在,則設置方法值
									MethodUtil.invoke(objInstance, methodName, new Class[] { methodValue.getClass() }, new Object[] { methodValue });
								}
							}
						} else {
							// 如果注解的key存在
							// 根據注解的key獲取map中的值
							methodValue = map.get(keyValue);
							// 設置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("")) {
							// 根據屬性名獲取map中的值
							FieldUtil.set(objInstance, fieldName, true, map.get(fieldName));
						} else {
							// 根據注解的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;
	}
}



更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 四虎最新永久在线精品免费 | 91精品久久久久亚洲国产 | 亚洲精品三区 | 国产综合欧美 | 夜夜嗷| 狠狠久久久久久亚洲综合网 | 国产深夜福利视频观看 | 欧美成人aaa大片 | jizz成熟丰满老女人 | 色综合欧美色综合七久久 | 久久综合免费 | 精品久久久久久影院免费 | 一级特黄性色生活片 | 日本香蕉网 | 一本到在线观看视频不卡 | 国产欧美一级片 | 久久99蜜桃精品久久久久小说 | 视频在线观看一区 | 西西人体大胆77777视频 | 久久久久久夜精品精品免费啦 | 亚洲国产精品a一区 | 国产麻豆高清视频在线第一页 | 国产一区在线免费观看 | 婷婷五月色综合香五月 | 欧美在线观看一区 | 国产三及 | 国产欧美一区二区精品性色 | 日本亚洲欧美国产日韩ay高清 | 国产日产欧产精品网站 | 免费的涩涩视频在线播放 | 99久久久国产精品免费播放器 | 一级特黄国产高清毛片97看片 | 久久精品国产半推半就 | 四虎成年永久免费网站 | 欧美日本免费观看αv片 | 国产成人亚洲综合欧美一部 | 久久666 | 毛片机地 | 毛片网站在线观看 | 四虎永久在线精品国产馆v视影院 | 欧美成人免费观看久久 |