java反射 beaninfo的应用

反射是一块很神奇的东西。可以谅解反射可以对框架的一些配置,和用法有更深入的了解。


package com.zwy;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Properties;

public class TestReflect {
	public static void main(String[] args) throws NoSuchFieldException{
		ContentWordBean content = new ContentWordBean();
		//topicbean.setChapter_id("123");
		List<String> fields=new ArrayList<String>();
		//fields.add("topic_id");
		//fields.add("node_id");
		getInsertSql(ContentWordBean.class,fields,"e_topic","");
		getSql(ContentWordBean.class,fields);
	}
	private static void getSql(Class className,List<String> suffixs) {
		try {
			//或得bean类
			BeanInfo beninfo = Introspector.getBeanInfo(className);
			//获得所有的属性描述
			PropertyDescriptor [] propertydescriptors = beninfo.getPropertyDescriptors();
			for(PropertyDescriptor pd:propertydescriptors){
				//获得读写方法
				System.out.println(pd.getName());
				System.out.println(pd.getReadMethod().getName());//读
				System.out.println(pd.getWriteMethod().getName());//写
				
			}
		} catch (IntrospectionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	/**通常需要将一个bean对象通过get方法插入到表中,本方法可以动态的生成sql语句
	 * 将对象的sql语句生成
	 * suffixs长度为空,则对所有的field进行插入
	 * table为插入的表名
	 * */
	public static String getInsertSql(Class className,List<String> suffixs,String table,String beanName) throws NoSuchFieldException{
		if("".equals(table)){
			System.out.println("表名为空");
			return null;					
		}
		String sqlparam = "";
		String sql ="insert into "+table+"(sqlparam) values(";
		String bean = beanName;
		if("".equals(bean)){
			//获得类名并且将第一个字母转为小写
			int index = className.getName().lastIndexOf(".")+1;
			bean = className.getName().substring(index);
			bean = bean.substring(0, 1).toLowerCase()+bean.substring(1);
		}
		//获得这个类的所有方法
		Method[] methods = className.getMethods();
		//是否取所有的fields
		if(suffixs.size() == 0){
			//获得私有属性
			Field[] fields = className.getDeclaredFields();
			for(Field field:fields){
				suffixs.add(field.getName());
			}
			//获得共有属性
			fields = className.getFields();
			for(Field field:fields){
				suffixs.add(field.getName());
			}
		}
		System.out.println(suffixs);
		for(String suffix:suffixs)
		{
			for(Method method:methods){
				//判断是否由get方法
				if(method.getName().toLowerCase().equals("get"+suffix)){
					try {
						//Field field = className.getDeclaredField(suffix);
						if (method.getReturnType() == java.lang.String.class){
							sqlparam += suffix+",";
							sql +="'\"+"+bean +"."+method.getName()+"()+\"',";
						}else
						if (method.getReturnType() == int.class)
						{
							sqlparam += suffix+",";
							sql +="'+"+bean +"."+method.getName()+"()+',";
						}
							
					} catch (SecurityException e) {
						e.printStackTrace();
					}
				}
			}		
		}
		sql = sql.replace("(sqlparam)", "("+sqlparam.substring(0, sqlparam.length()-1)+")");
		sql = "\""+sql.substring(0, sql.length()-1)+");\"";
		System.out.println(sql);
		return sql;
	}
}


package com.zwy;

import java.util.List;


public class ContentWordBean {

	//题目类型
	private String itemType;
	//序号
	private String serial;
	//题目内容
	private String title;
	//答案
	private List<String> answerList;
	//标准答案
	private String lastAnswer;
	//答案解析
	private String analysis;
	//难度系数
	private String koc;
	//分数
	private String score;
	//章名称
	private String chapterName;
	//节名称
	private String sectionName;
	//知识点
	private String knowledge;
	//图片
		public String getKnowledge() {
		return knowledge;
	}
	public void setKnowledge(String knowledge) {
		this.knowledge = knowledge;
	}
	public String getItemType() {
		return itemType;
	}
	public void setItemType(String itemType) {
		this.itemType = itemType;
	}
	public String getSerial() {
		return serial;
	}
	public void setSerial(String serial) {
		this.serial = serial;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public List<String> getAnswerList() {
		return answerList;
	}
	public void setAnswerList(List<String> answerList) {
		this.answerList = answerList;
	}
	public String getLastAnswer() {
		return lastAnswer;
	}
	public void setLastAnswer(String lastAnswer) {
		this.lastAnswer = lastAnswer;
	}
	public String getAnalysis() {
		return analysis;
	}
	public void setAnalysis(String analysis) {
		this.analysis = analysis;
	}
	public String getKoc() {
		return koc;
	}
	public void setKoc(String koc) {
		this.koc = koc;
	}
	public String getScore() {
		return score;
	}
	public void setScore(String score) {
		this.score = score;
	}
	public String getChapterName() {
		return chapterName;
	}
	public void setChapterName(String chapterName) {
		this.chapterName = chapterName;
	}
	public String getSectionName() {
		return sectionName;
	}
	public void setSectionName(String sectionName) {
		this.sectionName = sectionName;
	}
	
}



用来反射获取bean的get方法,set方法,所有的私有公有属性。

java反射的应用。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值