`
tenderuser
  • 浏览: 61336 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

javabean反射

    博客分类:
  • java
 
阅读更多
明天公司在看,需重构,代码有点乱,可以实现vo的多层反射为map类型。。中间估计有没考虑到的,明天再细看。。。  反射都用不习惯了。。
/**
 * 
 */
package ledkk.test;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/**
 * @author ledkk
 *
 */
public class Reflection {
	private static Logger log = Logger.getLogger("Reflection");

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		VOA a = new VOA();
		a.setId(123123L);
		a.setName("voa");
		VOB b = new VOB();
		b.setVobName("voB");
		a.setVob(b);
		List<VOB> vobs = new ArrayList<VOB>();
		vobs.add(b);
		a.setVobs(vobs);
		Map<VOB,String> m = new HashMap<Reflection.VOB, String>();
		m.put(b, "hello");
		a.setMap(m);
		Map<String,Object> map = covertObjToMap(a);
		System.out.println(map.get("name")+"    " + map.get("id") + "   "+map.get("vob"));
		Map<String,Object> vob = (Map<String, Object>) map.get("vob");
		System.out.println(vob.get("vobName"));
		System.out.println(map.get("vobs"));
		System.out.println(map.get("map"));
	}
	
	
	public static Map<String,Object> covertObjToMap(Object obj)throws Exception{
		Map<String,Object> map = new HashMap<String,Object>();
		Class clazz = obj.getClass();
		Method[] methods = clazz.getMethods();
		for(Method method : methods){
			String methodName = method.getName();
			Class retType = method.getReturnType();
			Class[] params = method.getParameterTypes();
			if(methodName.startsWith("set")&&params.length==1){
				Class paramsType = params[0];
				Package p = paramsType.getPackage();
				String getMethodName = methodName.replaceFirst("set", "get");
				if(p!=null){
					String packageName = p.getName();
					Method getMethod = clazz.getMethod(getMethodName, null);
					if(getMethod==null){
						getMethodName = methodName.replaceFirst("set", "is");
						getMethod = clazz.getMethod("", null);
						if(getMethod==null){
							log.info("getMethod is not find !");
							continue;
						}
					}
					
					Object ret = getMethod.invoke(obj, null);
					String fieldName = methodName.replaceFirst("set", "");
					fieldName = Character.toLowerCase(fieldName.charAt(0))+fieldName.substring(1);
					if(p!=null){
						Class retT = ret.getClass();
						if(packageName.startsWith("java.util")){
							Class[] interfaceClasses = retT.getInterfaces();
							if(ret instanceof Collection){
								Collection c = (Collection) ret;
								Collection list = (Collection) retT.newInstance(); 
								for(Object o : c){
									list.add(covertObjToMap(o));
								}
								map.put(fieldName, list);
								continue;
							}
							
							if(ret instanceof Map){
								Map c = (Map) ret;
								Map list = (Map) retT.newInstance();
								Set keySet = c.keySet();
								for(Object o : keySet){
									Object v = c.get(o);
									Package oP = o.getClass().getPackage();
									Package vP = v.getClass().getPackage();
									if(oP!=null&&vP!=null){
										String opName = oP.getName();
										String vPName = vP.getName();
										if((opName.startsWith("java.lang")||opName.startsWith("sun."))&&(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
											list.put(o, v);
											continue;
										}else if((opName.startsWith("java.lang")||opName.startsWith("sun."))&&!(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
											list.put(o, covertObjToMap(v));
											continue;
										}else if(!(opName.startsWith("java.lang")||opName.startsWith("sun."))&&(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
											list.put(covertObjToMap(o), v);
											continue;
										}else if(!(opName.startsWith("java.lang")||opName.startsWith("sun."))&&!(vPName.startsWith("java.lang")||vPName.startsWith("sun."))){
											list.put(covertObjToMap(o), covertObjToMap(v));
											continue;
										}
									}
									list.put(covertObjToMap(o), covertObjToMap(c.get(o)));
								}
								map.put(fieldName, list);
								continue;
							}
							
						}
						if(!(packageName.startsWith("java.lang")||packageName.startsWith("sun."))){
							Object retObj = covertObjToMap(ret);
							map.put(fieldName, retObj);
							continue;
						}
					}else{
						Object retObj = covertObjToMap(ret);
						map.put(fieldName,retObj );
						continue;
					}
					map.put(fieldName, ret);
				}
			}
		}
		return map;
	}
	
	
	public static class VOA{
		private Long id;
		private String name;
		private VOB vob;
		private List<VOB> vobs;
		private Map<VOB,String> map;
		
		
		
		
		/**
		 * @return the map
		 */
		public Map<VOB, String> getMap() {
			return map;
		}
		/**
		 * @param map the map to set
		 */
		public void setMap(Map<VOB, String> map) {
			this.map = map;
		}
		/**
		 * @return the vobs
		 */
		public List<VOB> getVobs() {
			return vobs;
		}
		/**
		 * @param vobs the vobs to set
		 */
		public void setVobs(List<VOB> vobs) {
			this.vobs = vobs;
		}
		/**
		 * @return the id
		 */
		public Long getId() {
			return id;
		}
		/**
		 * @param id the id to set
		 */
		public void setId(Long id) {
			this.id = id;
		}
		/**
		 * @return the name
		 */
		public String getName() {
			return name;
		}
		/**
		 * @param name the name to set
		 */
		public void setName(String name) {
			this.name = name;
		}
		/**
		 * @return the vob
		 */
		public VOB getVob() {
			return vob;
		}
		/**
		 * @param vob the vob to set
		 */
		public void setVob(VOB vob) {
			this.vob = vob;
		}
		
	}
	
	public static class VOB{
		private String vobName;

		/**
		 * @return the vobName
		 */
		public String getVobName() {
			return vobName;
		}

		/**
		 * @param vobName the vobName to set
		 */
		public void setVobName(String vobName) {
			this.vobName = vobName;
		}
		
	}
}



分享到:
评论

相关推荐

    java 根据javaBean反射自定义导出 excel、xml、pdf、csv

    在Java编程中,根据JavaBean反射来实现数据的导出,如Excel、XML、PDF和CSV格式,是一种常见的数据处理技术。JavaBean是Java中的一种设计模式,它提供了一种标准的方式来封装对象属性,便于数据操作。反射机制则是...

    servlet里javaBean反射

    用map来存取,反射获取from表单里面值。

    JavaBean与反射

    总之,JavaBean与反射是Java开发中两个重要的概念,前者聚焦于组件化编程和GUI构建,后者则为程序提供了强大的动态能力。理解并熟练运用这两者,将极大地提升开发者在构建复杂应用程序时的灵活性和效率。

    Java 反射封装 JavaBean

    使用 Java 反射封装 JavaBean &lt;br&gt; 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean

    利用反射实现JavaBean 的自动赋值

    ### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不...

    使用反射封装javabean

    使用java反射机制封装javabean 项目当中使用的一个通用的方法

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx

    "Java反射 JavaBean 对象自动...Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是一种功能强大且实用的技术,具有很高的开发价值和应用价值。但是,需要合理使用Java反射机制,避免性能和安全问题。

    java反射实现javabean转json实例代码.docx

    ### Java反射机制实现JavaBean转JSON的详细解析 #### 一、引言 在现代软件开发过程中,数据格式转换是一项非常常见的任务。特别是在处理不同系统之间的数据交换时,JSON(JavaScript Object Notation)因其轻量级...

    通过Java反射机制获取JavaBean对象

    1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息

    熟练掌握java反射机制

    5. JavaBean和反射 JavaBean是Java中的一种设计模式,通常用于构建可重用的组件。反射在JavaBean中扮演重要角色,允许工具通过属性的getter和setter方法动态地操作组件。例如,通过反射可以获取JavaBean的所有属性,...

    基于标注和反射机制的通用JavaBean持久化工具类.pdf

    【标题】和【描述】提到的是一个关于使用标注和反射机制来实现JavaBean持久化的技术文章,主要讨论如何创建一个通用的JavaBean持久化工具类,以提高开发效率,减少SQL语句的编写。 【标签】为空,因此无法提供额外...

    简单身份验证JAVABEAN的设计

    在 J2EE 系统中, JavaBean 通常用来封装业务逻辑和数据,实现业务逻辑和数据展示的分离,使系统更健壮和灵活。 在本设计中,我们使用 JavaBean 来封装用户名和学号的验证逻辑,使用 jsp+html 来实现显示设计。具体...

    用反射实现向不同简单JavaBean填充值的实现代码

    这里我们关注的是如何使用反射来向简单的JavaBean对象中设置和获取值,而不必显式地创建这些对象。这个过程涉及到Java的`java.lang.reflect`包中的几个关键类,如`Class`, `Field`, 和 `Method`。 首先,让我们理解...

    反射Reflection小应用

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至处理私有成员,这在某些情况下非常...

    使用反射将json自动装配到javaBean中

    使用反射将json自动装配到javaBean中

    javabean源码

    - **反射**:在运行时动态地获取类的信息并操作JavaBean。 - **JSP页面**:在Web开发中,JavaBean可以作为模型层,与JSP视图层进行数据交换。 5. **JavaBean在MVC架构中的角色**: 在MVC架构中,JavaBean作为...

    JavaBean讲解(上)

    4. 反射机制:JavaBean的属性、事件和方法可以通过反射API动态访问,增强了程序的灵活性。 使用JavaBean的场景: 1. MVC架构:在Model部分,JavaBean用于封装业务逻辑和数据,与View和Controller进行交互。 2. JSP...

    javaBean.rar

    例如,它可能有一个静态方法`jsonToJavaBean(String jsonString, Class&lt;T&gt; beanClass)`,这个方法接受一个JSON字符串和目标JavaBean的Class类型,然后使用反射创建并填充JavaBean实例。 5. **优化代码量** 使用...

    两个javabean的复制(反射)

    把一个javabean里面的属性值复制到另外一个javabean中相同的属性值

Global site tag (gtag.js) - Google Analytics