BeanTransWrapperBuilder.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.persagy.fm.translate.extension;
  2. import com.persagy.fm.common.utils.ProxyBeanUtil;
  3. import com.persagy.fm.translate.model.ITransWrapper;
  4. import org.springframework.cglib.beans.BeanCopier;
  5. import org.springframework.cglib.beans.BeanGenerator;
  6. import java.util.Collection;
  7. import java.util.Map;
  8. /**
  9. * 基于对象的包装
  10. * @author Charlie Yu
  11. * @Date 2021-03-03
  12. */
  13. public class BeanTransWrapperBuilder implements ITransWrapperBuilder{
  14. /**
  15. * 是否需要替换原始对象
  16. */
  17. private boolean isMap;
  18. /**
  19. * 扩展项
  20. */
  21. private Collection<String> extendProps = null;
  22. /**
  23. * 对象类
  24. */
  25. private Class<?> clazz = null;
  26. /**
  27. * 新的扩展类
  28. */
  29. private Class<?> newClass = null;
  30. /**
  31. * 生成器
  32. */
  33. private BeanGenerator gen;
  34. /**
  35. * 是否存在扩展
  36. */
  37. private boolean extend = false;
  38. /**
  39. * 构造方法
  40. * @param clazz 对象类
  41. */
  42. public BeanTransWrapperBuilder(Class clazz){
  43. this.isMap = Map.class.isAssignableFrom(clazz);
  44. this.clazz = clazz;
  45. }
  46. @Override
  47. public ITransWrapper createWrapper(Object origion) {
  48. if(isMap) {
  49. return new MapTransWrapper((Map<String, Object>) origion);
  50. }
  51. if(extend && gen == null){
  52. gen = ProxyBeanUtil.createBeanGenerator(origion, extendProps.toArray(new String[0]));
  53. if(gen == null) {
  54. extend = false;
  55. } else {
  56. newClass = (Class) gen.createClass();
  57. }
  58. }
  59. Object target = null;
  60. if(extend){
  61. BeanCopier copier = BeanCopier.create(this.clazz,newClass,false);
  62. target = gen.create();
  63. copier.copy(origion,target,null);
  64. }
  65. return new BeanTransWrapper(origion, target);
  66. }
  67. @Override
  68. public boolean isNeedReplaceOrigin() {
  69. return !isMap;
  70. }
  71. @Override
  72. public void setExtendProps(Collection<String> extendProps) {
  73. if(extendProps != null && extendProps.size() > 0) {
  74. this.extendProps = extendProps;
  75. extend = true;
  76. }else {
  77. extend = false;
  78. }
  79. }
  80. }