longkai / lab

广西大学 - 雨无声实验室开放平台
4 stars 6 forks source link

Jump Over yourself ! Java普通类获取Spring框架Bean #17

Open neemo14-15 opened 10 years ago

neemo14-15 commented 10 years ago

用Java反射实现的Bean拷贝类,可以实现对JavaBean的映射拷贝以及属性值获取:

[java] view plaincopyprint? 01.package com.sunfairs.util;

  1. 03.import java.lang.reflect.Method;
    04.import java.util.Arrays;

  2. 06.public class BeanUtil {

  3. public static void copyFields(Object src,Object des,boolean copyNull,String[]fieldNames,boolean include){
  4. Class desClass = des.getClass();
  5. Arrays.sort(fieldNames);
neemo14-15 commented 10 years ago

Method[]methods = src.getClass().getMethods();

  1. for(int i=0;i<methods.length;i++){
  2. Method method = methods[i];
  3. String methodName = method.getName();
  4. if(methodName.startsWith("get")){
  5. String attrName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4, methodName.length());
  6. boolean inAttr = Arrays.binarySearch(fieldNames, attrName) > 0 ? true:false;
  7. try {
  8. if(inAttr == include){
  9. Class returnType = method.getReturnType();
  10. Object returnValue = method.invoke(src, new Object[]{});
  11. if(!copyNull && returnValue == null){
  12. continue;
  13. }
neemo14-15 commented 10 years ago

String invokeMethodName = "set" + methodName.substring(3, methodName.length());

  1. Method invokeMethod = desClass.getMethod(invokeMethodName, new Class[]{returnType});
  2. invokeMethod.invoke(des, new Object[]{returnValue});
  3. }
  4. }
  5. catch (Exception e) {
  6. e.printStackTrace();
  7. }
  8. }
  9. }
  10. }
  11. public static void copyFields(Object src,Object des,boolean copyNull){
  12. final String get = "get";
  13. final String set = "set";
  14. final String is = "is";
  15. Class srcClass = src.getClass();
  16. Class desClass = des.getClass();
neemo14-15 commented 10 years ago

Method[]methods = srcClass.getMethods();

  1. for(int i=0;i<methods.length;i++){
  2. Method method = methods[i];
  3. String methodName = method.getName();
  4. if(methodName.startsWith(get) || methodName.startsWith(is)){
  5. String invokeMethodName = set + methodName.substring(3);
  6. try {
  7. Method invokeMethod = desClass.getMethod(invokeMethodName, new Class[]{method.getReturnType()});
  8. Object result = method.invoke(src, new Object[]{});
  9. if(!copyNull && result == null){
  10. continue;
  11. }
  12. invokeMethod.invoke(des, new Object[]{result});
  13. }
  14. catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. }
  19. }
neemo14-15 commented 10 years ago

有很多现成的类库用于解析这些数据。本文是对net.sf.json使用后的总结。目前官方... 1.将JSON组装的实体数据类型转换为Java中对应的简单Bean对象(只包含简单的数据类...

blog.csdn.net/tsyj810883... 2013-03-04 - 快照 .Java Bean应具有一个无参的构造器_360问答 1个回答 - 提问时间:2013年8月2日 最佳答案:如果将来要在应用程序中使用hibernate或spring时,最好有!即使不用,有一个无参的构造器也不会是多余的……

wenda.so.com/q/137542144806351... 2013-08-02 - 快照 Crystal Reports XI 创建Java Bean连接时,在没有出现选择java bean... 发贴时间:2009年4月21日 请选择一个Java Bean 类。 ? [问题点数:100分,无满意结帖,结帖人xtpdc257] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 xtpdc257 xtpdc257 ...

bbs.csdn.net/topics/3002... 2012-11-06 - 快照 .做一个Java类(如java bean),在jsp文件里引用这个类_Java web... 发贴时间:2009年7月22日 › 做一个Java类 (如java bean),在jsp文件里引用这个类 做一个Java类 (如java bean),在... CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司...