项目1笔记

发布于:2025-04-12 ⋅ 阅读:(43) ⋅ 点赞:(0)

@Data 

@Data 是一个常用的 Lombok 注解,主要用于 Java 类中,可以自动生成以下内容:

  • Getter(所有字段)

  • Setter(所有非 final 字段)

  • toString() 方法

  • equals() 和 hashCode() 方法

  • 无参构造函数(如果类中没有其他构造函数)

示例:

import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}

等价于手动编写:

public class User {
    private String name;
    private int age;

    // Getter & Setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    // toString(), equals(), hashCode()
    @Override
    public String toString() { ... }
    @Override
    public boolean equals(Object o) { ... }
    @Override
    public int hashCode() { ... }

    // 无参构造
    public User() {}
}

定义业务状态码

    public static final Integer RESULT_CODE_SUCCESS = 200;
    public static final Integer ERROR = 500;
    public static final Integer RESULT_CODE_FAIL = -1;
    public static final Integer RESULT_CODE_UN_LOGIN = -2;
  • 作用:定义了 HTTP 响应状态码或业务逻辑结果的常量。

  • 优点:使用 static final 确保不可变性。

深入理解 Spring 的 MethodParameter 类

MethodParameter 是 Spring 框架中一个非常重要的类,它封装了方法参数(或返回类型)的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。

核心功能

MethodParameter 主要提供以下功能:

  1. 获取参数类型信息 - 包括泛型类型信息

  2. 获取参数注解 - 包括参数上的注解

  3. 获取参数名称 - 如果编译时保留了参数名信息

  4. 获取所属方法或构造器 - 参数所属的方法或构造器信息

MethodParameter 是 Spring 框架中处理方法参数元数据的核心类,它提供了:

  • 完整的类型信息(包括泛型)

  • 注解访问能力

  • 参数名发现能力

  • 方法/构造器上下文信息

主要应用场景

1. Spring MVC 参数解析 

2. 响应体处理 (ResponseBodyAdvice)

3. 数据绑定和验证

常见问题解决

问题1:获取参数名返回null

解决方案

  1. 使用 Java 8+ 编译时添加 -parameters 选项

  2. 或者使用 ASM 库分析字节码:

parameter.initParameterNameDiscovery(new DefaultParameterNameDiscoverer());
String name = parameter.getParameterName();

问题2:泛型类型信息丢失

解决方案
使用 ResolvableType 代替直接获取 Class 对象:

// 不推荐 - 可能丢失泛型信息
Class<?> type = parameter.getParameterType();

// 推荐 - 保留完整泛型信息
ResolvableType type = ResolvableType.forMethodParameter(parameter);

@SneakyThrows

@SneakyThrows 是 Project Lombok 提供的一个实用注解,它允许你"偷偷地"抛出受检异常(checked exceptions),而无需在方法签名中声明它们。 

工作原理

@SneakyThrows 在编译时通过字节码操作实现以下功能:

  1. 移除受检异常要求:让编译器不检查你是否处理或声明了受检异常

  2. 异常转换:通过字节码技巧将受检异常作为非受检异常抛出


网站公告

今日签到

点亮在社区的每一天
去签到