简单来说:
  • 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝
  • 深拷贝: 对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
 
添加了这个jar包,仅代表可以在项目中引入如@NotNull等注解,但是它并不会起作用,上面的依赖只是使用了Java规范,并没有提供实现,因此还需要引入hibernate-validator模块(在springboot项目中直接使用场景启动器即可spring-boot-starter-validation)
 
如果不加全局捕获异常@ControllerAdvice等,那么比如用postman调用返回只是个错误码,所以得捕获,并且返回体其实也是自己在捕获那里自己加的
 
自定义 Validator(实用)

第一步,你需要创建一个注解 Region。

@Target({FIELD}) // @Target:定义注解的作用目标(作用域)
@Retention(RUNTIME)   //@Retention是一个元注解(meta-annotation),用于定义注解的保留策略。注解可以在源代码、编译时和运行时保留,
@Constraint(validatedBy = RegionValidator.class)  //约束条件
@Documented  //如果一个注解@B,被@Documented标注,那么被@B修饰的类,生成文档时,会显示@B。如果@B没有被@Documented标准,最终生成的文档中就不会显示@B。
public @interface Region {

    String message() default "Region 值不在可选范围内";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
第二步,你需要实现 ConstraintValidator接口,并重写isValid 方法。
public class RegionValidator implements ConstraintValidator<Region, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        HashSet<Object> regions = new HashSet<>();
        regions.add("China");
        regions.add("China-Taiwan");
        regions.add("China-HongKong");
        return regions.contains(value);
    }
}
现在你就可以使用这个注解:
@Region
private String region;
 
Spring Schedule 实现定时任务
如果我们需要自定义线程池执行话只需要新加一个实现SchedulingConfigurer接口的 configureTasks 的类即可,这个类需要加上 @Configuration 注解。