You need to enable JavaScript to run this app. Spring @Required注解是否已被弃用?对应的替代注解是什么
优惠活动
大模型
产品
解决方案
定价
更多

Spring @Required注解是否已被弃用?对应的替代注解是什么

@Required 注解弃用后的替代方案

Spring 5.1 版本起@Required注解正式被标记为弃用,原注解的核心作用是标记Bean的Setter方法必须被Spring容器完成属性注入,否则容器启动阶段就会抛出BeanInitializationException。以下是可实现同等功能的替代方案:

  • 方案1:构造器注入(官方首推)
    Spring团队目前优先推荐使用构造器注入的方式处理必填属性,无需额外注解即可保证属性必须被赋值,同时还能将属性声明为不可变类型。代码示例如下:
public class Product {
    private final String id;

    // Spring 4.3+ 若类仅存在一个构造器,无需额外添加@Autowired注解
    public Product(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

这种方式从语法层面就强制实例化对象时必须传入id参数,从根源上避免了必填属性未赋值的问题,也符合不可变对象的设计规范。

  • 方案2:@Autowired(required = true)(Setter注入场景适配)
    如果项目代码必须保留Setter注入的写法,可以直接将原@Required替换为@Autowired(required = true),Spring容器会自动校验对应属性必须完成注入,效果和原@Required完全一致。代码示例如下:
import org.springframework.beans.factory.annotation.Autowired;

public class Product {
    private String id;
    
    public String getId() {
        return id;
    }

    @Autowired(required = true)
    public void setId(String id) {
        this.id = id;
    }
}
  • 方案3:JSR-380校验注解@NotNull(运行时属性校验场景)
    如果不仅需要容器注入层面的校验,还需要做通用的参数非空校验,可以配合Spring的@Validated注解使用javax.validation.constraints.NotNull(Jakarta EE环境对应jakarta.validation.constraints.NotNull)实现更强的校验能力。代码示例如下:
import javax.validation.constraints.NotNull;
import org.springframework.validation.annotation.Validated;

@Validated
public class Product {
    @NotNull
    private String id;
    
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

该方案除了Spring容器注入场景外,也可以对其他场景传入的属性值做非空校验。

内容的提问来源于stack exchange,提问作者swapnil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 12:42:02