云计算百科
云计算领域专业知识百科平台

Lombok常用注解总结

@RequiredArgsConstructor注解

1.示例

在类上添加@RequiredArgsConstructor注解,Lombok会自动生成一个构造函数,该构造函数包含类中所有final字段和被@NonNull注解标注的字段。示例如下:

import lombok.NonNull;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class User {
private final Long id;
@NonNull
private String name;
private Integer age; // 普通字段不会出现在构造函数中
}

上面的代码经过编译后,会生成如下构造函数:

public User(Long id, @NonNull String name) {
if (name == null) {
throw new NullPointerException("name is marked non-null but is null");
}
this.id = id;
this.name = name;
}

2.用于Spring Bean的构造函数注入

@RequiredArgsConstructor常常和@Autowired一起使用,以此实现Spring Bean的构造函数注入。 示例:

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository; // final字段
private final EmailService emailService; // final字段
}

编译之后,会生成如下构造函数:

@Service
public class UserService {
private final UserRepository userRepository;
private final EmailService emailService;

public UserService(UserRepository userRepository, EmailService emailService) {
this.userRepository = userRepository;
this.emailService = emailService;
}
}

Spring 4.3 之后无需显式使用 @Autowired 在 Spring 4.3 及后续版本中,如果一个类只有唯一的构造函数,那么这个构造函数的 >@Autowired 注解是可以省略的。Spring 能够自动识别并完成依赖注入。例如:

@Service
@RequiredArgsConstructor // 生成唯一的构造函数
public class UserService {
private final UserRepository userRepository;
}

上面的代码在编译之后会生成如下构造函数:

public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}

此时,Spring 会自动注入 UserRepository,无需添加 @Autowired。 存在多个构造函数时需要显式使用 @Autowired 当类中存在多个构造函数,并且你希望 Spring 使用特定的构造函数时,就需要显式添加 >@Autowired 注解。示例如下:

@Service
@RequiredArgsConstructor // 生成构造函数1
public class UserService {
private final UserRepository userRepository;

@Autowired // 显式指定使用这个构造函数
public UserService(UserRepository userRepository, OtherService otherService) {
this.userRepository = userRepository;
// 其他逻辑
}
}

注意事项
  • final字段必须初始化:如果类中有final字段,那么这些字段必须在构造函数中进行初始化,否>则会出现编译错误。
  • 避免与@AllArgsConstructor同时使用:@RequiredArgsConstructor和@AllArgsConstructor都用>于生成构造函数,同时使用可能会造成冲突。
  • 静态字段被忽略:静态字段不会参与构造函数的生成。
  • 参数顺序:构造函数中参数的顺序和类中字段的声明顺序是一致的。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Lombok常用注解总结
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!