前提:
本文将介绍在动态加载不确定类的方法,并且自由访问不确定的类的数据
高级:
当你获得到某个类的对象们时,对象的属性值为类对象的只能获得ID而不能获取到其他值,
这时获得的属性对象是个代理类的对象,如要获取真正的属性对象,我们要通过hibernate执行查询语句。
开始啦:
根据String型的名称,动态生成类:
- /**
- * @return 返回导出对象对应的类
- * @throws Exception
- * 抛出异常
- */
- public Object get(String className) throws Exception {
- Class<?> clz = Class.forName(className);
- Object obj = clz.newInstance();
- return obj;
- }
/**
* @return 返回导出对象对应的类
* @throws Exception
* 抛出异常
*/
public Object get(String className) throws Exception {
Class<?> clz = Class.forName(className);
Object obj = clz.newInstance();
return obj;
}
获取动态生成的类的对象:
- /**
- * @param obj 要转换的对象 这个对象此时是代理类
- * @param session hibernate的session
- *
- */
- public Object ObjectByClassName(Object obj,Session session){
- obj = (Object)((SessionImpl)session).immediateLoad(fieldName,session.getIdentifier(obj));
- //通过session查询语句,得到一个完整的对象
- return obj;
- }
/**
* @param obj 要转换的对象 这个对象此时是代理类
* @param session hibernate的session
*
*/
public Object ObjectByClassName(Object obj,Session session){
obj = (Object)((SessionImpl)session).immediateLoad(fieldName,session.getIdentifier(obj));
//通过session查询语句,得到一个完整的对象
return obj;
}
访问动态生成的类的属性:
- /**
- *
- * @param obj 动态获取的对象
- * @param fieldName 该对象的类
- *
- * @return 导出对象中分类条件字段值
- */
- private Object getProperty(Object obj,String fieldName) {
- Object value = null;
- Field property;
- try {
- Class<?> conClass = obj.getClass();
- property = conClass.getDeclaredField(fieldName);
- property.setAccessible(true); //如果要访问的属性是私有的,那么此句很必要,你懂的!
- try {
- value=property.get(obj);
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- }catch(ClassNotFoundException e){
- e.printStackTrace();
- }
- return value;
- }
/**
*
* @param obj 动态获取的对象
* @param fieldName 该对象的类
*
* @return 导出对象中分类条件字段值
*/
private Object getProperty(Object obj,String fieldName) {
Object value = null;
Field property;
try {
Class<?> conClass = obj.getClass();
property = conClass.getDeclaredField(fieldName);
property.setAccessible(true); //如果要访问的属性是私有的,那么此句很必要,你懂的!
try {
value=property.get(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}catch(ClassNotFoundException e){
e.printStackTrace();
}
return value;
}
转载于:https://blog.51cto.com/shuaigee/1140106