java的反射机制

本文介绍了一种使用Java反射机制进行对象属性设置的方法,并展示了如何结合反射与SQL查询来动态构建并填充对象实例的过程。此外,还涉及了通过反射调用加密类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public void update(JlDwmyDahua jlDwmyDahua) {
		Class clazz=jlDwmyDahua.getClass();//得到类
		Field[] fs=clazz.getDeclaredFields();//得到所有字段
		Method m=null;
		try{
			for(Field f:fs){
				//m=ReflectUtil.getGetMethod(clazz, f.getName());//获取getter方法
				String fieldName = "get" + f.getName().substring(0, 1).toUpperCase()+ f.getName().substring(1);
				m= clazz.getMethod(fieldName, null);
				if(f.getName().equals("dhId")){
					continue;
				}
				if(f.getName().equals("dhTime")){
					continue;
				}
				BigDecimal getNum=(BigDecimal)m.invoke(jlDwmyDahua, new Object[]{});
				if(getNum==null || ("").equals(getNum)){
					m=ReflectUtil.getSetMethod(clazz, f.getName());//获取setter方法
					m.invoke(jlDwmyDahua, new Object[]{BigDecimal.valueOf(0.0d)});
				}
			}
			
			jlDwmyDahuaService.update(jlDwmyDahua);
			this.success("update.success");
			this.redirect(SUCCESS);
		}catch (Exception e) {
			e.printStackTrace();
		}
		
	}



/////////////////////////////从配置文件读取信息
		String ReferencesEncryptionClass =  "bctts.qrcode.Encrypt" ;//默认加密类
		ResourceBundle rb=ResourceBundle.getBundle("bctts.qrcode.configQrInfo");//注意路径是以.表示的
		if(rb != null ){
			ReferencesEncryptionClass = rb.getString("ReferencesEncryptionClass");
		}
		////////////////////////////////////////////////////
		/*Encrypt encoder = new Encrypt();
		String mi = encoder.encrypt(toEncryptStr.toString());// 加密
		*/		
		//利用反射机制执行加密方法
		 Class clazz= Class.forName(ReferencesEncryptionClass);
		 Object o = clazz.newInstance();
		 //获取密文信息
		 String mi   = (String)clazz.getDeclaredMethod("encrypt",String.class).invoke(o,new Object[]{toEncryptStr.toString()}); 
		/////////////////////////////////////////////


如果不确定为哪个类,则方法应:(欢欢大神提供)

	public static List commonQuery(String sql, Class cls) {

		List list = new ArrayList();
		if (sql != null && sql.length() > 0) {
			try {
				BaseDao baseDao = BeanUtil.getInstance().getBaseDao();
				ResultSet rs = baseDao.queryBySQL(sql);

				// 从结果集中获取查询的列表名
				ResultSetMetaData rsmeta = rs.getMetaData();

				while (rs.next()) {

					// 动态的创建一个对象?
					Object obj = cls.newInstance(); // == UserInfo user = new
													// UserInfo();

					// 反射类中的属性和方法
					Field fds[] = cls.getDeclaredFields();// 获取所有的属性(包括private)

					for (int i = 0; i < fds.length; i++) {

						// 强制给属性赋值
						fds[i].setAccessible(true);

						// 给属性赋值(必须先判断数据类型)
						String fdTypeName = fds[i].getType().getName();// java.lang.String
																		// int
																		// float
																		// java.lang.Object

						// 当前属性名
						String currentName = fds[i].getName();
						// 添加一个条件.................(属性名和查询的列表相同的时候,才给属性赋值)
						for (int j = 1; j <= rsmeta.getColumnCount(); j++) {

							String columnName = rsmeta.getColumnName(j);
							// 属性名和列名相同的时候,可以赋值了
							if (currentName.equalsIgnoreCase(columnName)) {
								if (fdTypeName.endsWith("String")) {// String类型
									fds[i].set(obj, rs.getString(currentName));
								} else if (fdTypeName.endsWith("int")
										|| fdTypeName.endsWith("Integer")) {
									fds[i].setInt(obj, rs.getInt(currentName));
								} else if (fdTypeName.endsWith("float")
										|| fdTypeName.endsWith("Float")) {
									fds[i].setFloat(obj,
											rs.getFloat(currentName));
								} else if (fdTypeName.endsWith("double")
										|| fdTypeName.endsWith("Double")) {
									fds[i].setDouble(obj,
											rs.getFloat(currentName));
								} else {
									System.out.println("系统暂时不支持该数据类型,Sorry!!!");
								}

							}
						}
					}
					list.add(obj);
				}
				baseDao.closeResultSet(rs);
				baseDao.closeResource();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return list;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值