首页 > 其他分享 >Spring BeanUtils.copyProperties简化写法

Spring BeanUtils.copyProperties简化写法

时间:2023-11-10 11:12:07浏览次数:42  
标签:target int Spring source copyProperties Student stopWatch BeanUtils

代码

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.util.StopWatch;

public class BeanUtils2 {
  
  
  /**
   * 减少外部调用代码行数,没有其他含义功能
   * Student target = BeanUtils.copyProperties(source, new Student());
   * @param source
   * @param target
   * @param <T>
   * @return
   * @throws BeansException
   */
  public static <T> T copyProperties(Object source, T target) throws BeansException {
    BeanUtils.copyProperties(source, target);
    return target;
  }
  
  public static void main(String[] args) {
    Student source = new Student("name", 10, 170, 100);
    
    
    StopWatch stopWatch = new StopWatch();
    
    stopWatch.start("预热");
    for (int i = 0; i < 1000; i++) {
      Student student = new Student("name", 10, 170, 100);
      Student student1 = copyProperties(student, new Student());
      BeanUtils.copyProperties(source, new Student());
    }
    stopWatch.stop();
    
    stopWatch.start("copy自定义2");
    for (int i = 0; i < 1000000; i++) {
      Student target = copyProperties(source, new Student());
      int age = target.getAge();
    }
    stopWatch.stop();
    
    
    stopWatch.start("原生");
    for (int i = 0; i < 1000000; i++) {
      Student target = new Student();
      BeanUtils.copyProperties(source, target);
      int age = target.getAge();
    }
    stopWatch.stop();
    
    System.out.println(stopWatch.prettyPrint());
  }
  
  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public static class Student {
    
    private String name;
    
    private int age;
    
    private int height;
    
    private int weight;
    
  }
}

执行时间

时间差不大

ms % Task name

00683 063% 预热
00213 020% copy自定义2
00195 018% 原生


ms % Task name

00365 048% 预热
00202 027% copy自定义2
00188 025% 原生

标签:target,int,Spring,source,copyProperties,Student,stopWatch,BeanUtils
From: https://www.cnblogs.com/bigorang/p/17823624.html

相关文章

  • springboot学习日记(一)
    今天连下数据库,不小心打成netstartmysql了,好糗。。以后等时机到了笔记也该换成markdown写了,好久没写md后面得复习下。然后idea这边连数据库很简单不用写专门的程序,右侧栏database直接可以点开具体到连接某个数据库。记录一下注解的原理和作用:以前,『XML』是各大框架的青睐者,它......
  • Springboot报错,java.lang.IllegalArgumentException: argument type mismatch
    1、报错信息java.lang.IllegalArgumentException:argumenttypemismatch atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) atsun.reflect.DelegatingMethodAccessorI......
  • 「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(二)
    本教程将指导开发者如何生成一个可运行的SpringMVC客户应用程序,该应用程序实现域模型的CRUD应用程序模式。在本教程中,您将学习如何:从数据库表的Scaffold到现有项目部署搭建的应用程序在上文中,我们介绍了如何创建一个Web项目和来自数据库表的Scaffold等,本文将继续介绍如何部......
  • 如何让spring一直启动不关掉
    Spring是J2EE应用程序框架,深受java程序员的欢迎,大量的项目都会引入Spring框架。如果是web项目,启动Spring之后,web容器会维持进程持续运行,Spring也就可以一直出于启动状态,但如果是普通的java应用,在启动Spring之后,随着java进程的停止,spring也会停止。那么如何让spring一直启动持续服......
  • SpringCloud 集成 Sentinel 和使用小结
    Sentinel是阿里的一款微服务请求监控组件,能够通过配置实现流量控制,降级熔断,热点参数限流,授权规则限流,使用非常方便。官方默认只提供了流量控制配置规则持久化代码实现,这也是我们最常用的,上篇博客已经实现并进行了部署。本篇博客基于上篇博客搭建好的Sentinel和Nacos环境,介绍......
  • springboot社区团购管理系统的设计与实现-计算机毕业设计源码+LW文档
    abo开发说明开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器部分数据库:----Tablestructurefortableaddress--DROPTABLEIFEXISTSaddr......
  • springboot科研管理系统-计算机毕业设计源码+LW文档
    摘 要随着计算机技术发展,计算机系统的应用已延伸到社会的各个领域,大量基于网络的广泛应用给生活带来了十分的便利。所以把科研管理与现在网络相结合,利用计算机搭建科研管理系统,实现科研的信息化。则对于进一步提高科研管理发展,丰富科研管理经验能起到不少的促进作用。系统阐述......
  • springboot2 @Mapper注解问题
    @MapperpublicinterfaceDeptMapper{   DeptgetById(Integerid);}问:这段代码是把这个接口注入到spring的bean容器当中去了,但是spring的bean容器不是存的实例化对象吗?答:在Spring框架中,将一个类(或接口)注入到Spring的容器中,即将其声明为一个Bean。这样,Spring容器会负......
  • SpringBoot是如何保证服务启动后不自动停止的
    一般项目执行后,当程序结束会自动关闭程序。但Springboot项目,启动后,只要不发生error错误,一般不会自动停止。这是为什么呢?简单Java阻止停止为了保证一个服务能够持续有效地对外提供服务,一般会有相应的处理方式,比如:服务器上的守护进程脚本但是,在Java代码层面,除了shell脚本之外......
  • Spring Boot中使用RabbitMQ完成延迟功能
    MQ-消息队列简单来说就是将“消息”放到“队列”中,然后慢慢处理队列中的消息。完成延迟功能总体的思路是将消息放到队列中,为消息设置过期时间,不直接处理这个队列中的消息,等到消息过期,将它转到另一个队列进行处理,从而完成延迟功能。基本概念1.队列队列是RabbitMQ的内部对象,用......