美文网首页
Cglib的BeanCopier比BeanUtils.copyp

Cglib的BeanCopier比BeanUtils.copyp

作者: hemingkung | 来源:发表于2019-06-11 21:22 被阅读0次
    //引入的包
    import org.springframework.cglib.beans.BeanCopier;
            Team tt = new Team();
            tt.setId(Identities.hexUuid2());
            tt.setName("我的小组");
            tt.setDescription("我最喜欢的小组");
    
            TeamEditParam tp = new TeamEditParam();
            BeanCopier copier = BeanCopier.create(Team.class, TeamEditParam.class, false);
            copier.copy(tt, tp, null);
    
            String id = tp.getId();
            String name = tp.getNewTeamName();
            String des = tp.getDescription();
    
    
    
    package com.thingsmatrix.api;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class AppleDTO {
        private String name;
    
        private int price;
    
        private String address;
    
        private String weight;
    
        private String createDate;
    }
    
    
    package com.thingsmatrix.api;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.Date;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class FoodDTO {
        private int price;
    
        private String code;
    
        private Integer weight;
    
        private String name;
    
        private Date createDate;
    
    }
    
    package com.thingsmatrix.api;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.cglib.beans.BeanCopier;
    import org.springframework.cglib.core.Converter;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import static junit.framework.TestCase.assertTrue;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = IotApiApplication.class)
    public class IotApiApplicationTest {
    
        @Test
        public void test(){
    
            // 动态生成用于复制的类,并使用Converter类
            BeanCopier copier = BeanCopier.create(AppleDTO.class, FoodDTO.class, true);
    
            AppleDTO source = new AppleDTO();
            source.setPrice(new Integer(42));
            FoodDTO target = new FoodDTO();
    
            // 执行source到target的属性复制
            copier.copy(source, target, new Converter() {
    
                /**
                 * @param sourceValue source对象属性值
                 * @param targetClass target对象对应类
                 * @param methodName targetClass里属性对应set方法名,eg.setId
                 * @return
                 */
                public Object convert(Object sourceValue, Class targetClass, Object methodName) {
                    if (sourceValue.equals(Integer.TYPE)) {
                        return new Integer(((Number)sourceValue).intValue() + 1);
                    }
                    return sourceValue;
                }
            });
    
            //assertTrue(target.getPrice() == 43);
            if(target.getPrice()==43){
                System.out.println("wwwwwwwwwwwwweeeeeeeeeeee");
            }
    
    
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:Cglib的BeanCopier比BeanUtils.copyp

          本文链接:https://www.haomeiwen.com/subject/riscfctx.html