前提:
本文将介绍在动态加载不确定类的方法,并且自由访问不确定的类的数据
高级:
当你获得到某个类的对象们时,对象的属性值为类对象的只能获得ID而不能获取到其他值,
这时获得的属性对象是个代理类的对象,如要获取真正的属性对象,我们要通过hibernate执行查询语句。
开始啦:
根据String型的名称,动态生成类:

Java代码 复制代码 收藏代码
  1. /**
  2. * @return 返回导出对象对应的类
  3. * @throws Exception
  4. * 抛出异常
  5. */
  6. public Object get(String className) throws Exception {
  7. Class<?> clz = Class.forName(className);
  8. Object obj = clz.newInstance();
  9. return obj;
  10. }
/**
     * @return 返回导出对象对应的类
     * @throws Exception
     *             抛出异常
     */
    public Object get(String className) throws Exception {
        Class<?> clz = Class.forName(className);
        Object obj = clz.newInstance();
        return obj;
    }


获取动态生成的类的对象:

Java代码 复制代码 收藏代码
  1. /**
  2. * @param obj 要转换的对象 这个对象此时是代理类
  3. * @param session hibernate的session
  4. *
  5. */
  6. public Object ObjectByClassName(Object obj,Session session){
  7. obj = (Object)((SessionImpl)session).immediateLoad(fieldName,session.getIdentifier(obj));
  8. //通过session查询语句,得到一个完整的对象
  9. return obj;
  10. }
/**
     * @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;
}


访问动态生成的类的属性:

Java代码 复制代码 收藏代码
  1. /**
  2. *
  3. * @param obj 动态获取的对象
  4. * @param fieldName 该对象的类
  5. *
  6. * @return 导出对象中分类条件字段值
  7. */
  8. private Object getProperty(Object obj,String fieldName) {
  9. Object value = null;
  10. Field property;
  11. try {
  12. Class<?> conClass = obj.getClass();
  13. property = conClass.getDeclaredField(fieldName);
  14. property.setAccessible(true); //如果要访问的属性是私有的,那么此句很必要,你懂的!
  15. try {
  16. value=property.get(obj);
  17. } catch (IllegalArgumentException e) {
  18. e.printStackTrace();
  19. } catch (IllegalAccessException e) {
  20. e.printStackTrace();
  21. }
  22. } catch (SecurityException e) {
  23. e.printStackTrace();
  24. } catch (NoSuchFieldException e) {
  25. e.printStackTrace();
  26. }catch(ClassNotFoundException e){
  27. e.printStackTrace();
  28. }
  29. return value;
  30. }
   /**
     * 
     * @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;
    }