Spring Boot @AllArgsConstructor 还是 @RequiredArgsConstructor

在Spring Boot项目中,选择使用 @AllArgsConstructor 还是 @RequiredArgsConstructor 这两个注解都是 Lombok 库提供的,用于简化构造函数的创建。

区别:

1. @AllArgsConstructor 会在类上生成一个包含所有非静态、非 final 字段的构造函数。这意味着,如果你的类中有多个字段,并且希望在构造函数中初始化所有这些字段,那么可以使用 @AllArgsConstructor。

示例:

@RestController
@AllArgsConstructor
@Api(tags = "APP/接口版本更新",description = "")
public class SysVersionCtrl extends BaseFragment {


    ISystemVersionService service;
    

}

2. @RequiredArgsConstructor 会在类上生成一个包含所有被标记为 final 或声明为 private 的字段的构造函数。这意味着只有那些不可变或私有的字段才会被包含在构造函数中。这通常用于依赖注入场景,特别是当某些字段是必须的,并且希望在构造时就提供这些依赖时。

示例:

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
@Api(tags="用户服务",description = "")
public class SysUserPullCtrl  extends ApiFrag {

    
    final ISysUserPullService userPullService;
    final ISysUserService userservice;
    

}

 

其它:

@AllArgsConstructor 和 @RequiredArgsConstructor 不适合用来注入由 @Value 注解绑定的值,因为这些值通常是在运行时动态解析的,并且不是作为构造函数的参数注入。如果你需要在构造函数中初始化这些值,可以考虑使用 @Configuration 类结合 @Bean 方法的方式,或者直接在类中使用 @Value 注解来实现。

示例:

@Data
@Component
@ConfigurationProperties(prefix = "custom")
public class CustomProperties {

    private Boolean loginfo=true;
    private Boolean sms=false;
    private String  code;


}


@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
@Api(tags="用户服务",description = "")
public class SysUserPullCtrl  extends ApiFrag {

    
    final ISysUserPullService userPullService;
    final ISysUserService userservice;
    final CustomProperties custProperties;

}

 

总结:

在大多数情况下,@RequiredArgsConstructor 是更好的选择,因为它仅生成必要的构造函数,减少了不必要的代码,并且保持了依赖关系的清晰性。这也有助于遵循最小必要原则,使得代码更加简洁和易于维护。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值