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

java基础之(三) 反射机制

阅读更多
利用反射机制生成javaBean
很多框架都是采用反射来实例化对象,进行注入的。

package reflect;

public class User{
	public User() {}
	public User(String name,Integer age){
		this.age=age;
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	private String name;
	private Integer age;
	

}


package reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class MyReflect {
	public Object getBean(Class cla,Map<String,Object> map)throws Exception{
		Object obj=cla.newInstance();//实例对象
		Field[] fields=User.class.getDeclaredFields();//得到所有私有属性
		for(String key:map.keySet()){
			boolean vaildate=false;
			for (Field field: fields) {//属性有map 进行匹配
				if(field.getName().equals(key)){
					vaildate=true;
					break;
				}
			}
			if(vaildate){
				String methodName="set"+key.substring(0,1).toUpperCase()+key.substring(1);
				Object methodValue=map.get(key);//调用方法进行赋值
				Method method=cla.getMethod(methodName, methodValue.getClass());
				method.invoke(obj, methodValue);
			}
		}
		return obj;
	}
	
	public static void main(String[] args) throws Exception {

		MyReflect reflect=new MyReflect();
		Map<String,Object> map=new HashMap<String,Object>();
		map.put("name","张三");
		map.put("age", 20);
		map.put("aa", 23);//不存在的属性
		User user=(User) reflect.getBean(User.class, map);
		System.out.println("name:"+user.getName()+"age:"+user.getAge());
		
	}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics