package com.base.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import static java.lang.Class.*; public class MySpringBean { public static Object getBean(String className,Class[] constructorParamType,Object[] constructorArg,Map<String,Object> param) { Object obj=null; try { Class clazz = forName(className); if(constructorParamType!=null&&constructorParamType.length>0) { Constructor constructor = clazz.getConstructor(constructorParamType); obj = constructor.newInstance(constructorArg); }else { obj = clazz.newInstance(); } Field[] fields= clazz.getDeclaredFields(); for(Field field: fields){ Class fieldClass = field.getType(); String fieldClassName = fieldClass.getName(); System.out.println("fieldClassName--->"+fieldClassName); String fieldName =field.getName(); Method setMethod = clazz.getMethod("set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1),fieldClass); if(setMethod!=null) { Object fieldValue = param.get(className + "." + fieldName); if(fieldValue!=null) { if ("java.lang.Integer".equals(fieldClassName) || "java.lang.String".equals(fieldClassName) || "java.lang.Double".equals(fieldClassName) || "java.lang.Long".equals(fieldClassName) || "java.lang.Short".equals(fieldClassName) || "java.lang.Short".equals(fieldClassName) || "java.lang.Byte".equals(fieldClassName)) { Constructor con = fieldClass.getConstructor(String.class); setMethod.invoke(obj, con.newInstance(fieldValue)); } else { setMethod.invoke(obj, fieldValue); } } } } }catch (ClassNotFoundException e){ }catch (Exception e){ } return obj; } public static void main(String[] args) { Map<String,Object> likeParam=new HashMap<String,Object>(); likeParam.put("com.base.reflect.Like.name","喜欢唱歌"); Map<String,Object> param=new HashMap<String,Object>(); //param.put("com.base.reflect.Person.id","1"); param.put("com.base.reflect.Person.name","张三"); param.put("com.base.reflect.Person.age","10"); param.put("com.base.reflect.Person.sex",1); param.put("com.base.reflect.Person.membered",true); param.put("com.base.reflect.Person.like",(Like) MySpringBean.getBean("com.base.reflect.Like",null,null,likeParam)); Class[] constructorParamType=new Class[]{String.class}; Object[] constructorArg = new Object[]{"初始化构造函数值"}; Person person = (Person) MySpringBean.getBean("com.base.reflect.Person",constructorParamType,constructorArg,param); System.out.println(person.toString()); } }
package com.base.reflect;
public class Like {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.base.reflect;
public class Person {
private String name;
private Integer age;
private int sex;
private Boolean membered;
private Like like;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Like getLike() {
return like;
}
public void setLike(Like like) {
this.like = like;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Boolean getMembered() {
return membered;
}
public void setMembered(Boolean membered) {
this.membered = membered;
}
@Override
public String toString(){
return "name:"+this.name+",age:"+this.age+",like:"+(this.like!=null?this.like.getName():"")+",sex:"+this.sex+",membered:"+this.membered;
}
}