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;
}
}