在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 是更好的选择,因为它仅生成必要的构造函数,减少了不必要的代码,并且保持了依赖关系的清晰性。这也有助于遵循最小必要原则,使得代码更加简洁和易于维护。

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部