@Builder
어노테이션을 사용하려면 해당 클래스의 생성자가 기본 생성자가 아니어야 한다고 한다.
기본 생성자는 Lombok의 @Builder
어노테이션을 사용할 때 필요한데, 해당 클래스의 생성자가 아예 없거나 인자를 가진 생성자만 존재하는 경우 @NoArgsConstructor
어노테이션을 함께 사용하여 기본 생성자를 생성해야 한다.
주의할 점은 @NoArgsConstructor (access = AccessLevel.PROTECTED )
기본생성자의 엑세스 레벨을 Protected로 지정하여 패키지 외부에서 해당 클래스의 인스턴스를 직접 생성하는 것을 제한하는게 좋다.
import lombok.NoArgsConstructor;
import lombok.Builder;
@NoArgsConstructor (access = AccessLevel.PROTECTED )
public class JwtFactory {
@Builder
public JwtFactory(String subject, Date issuedAt, Date expiration, Map<String, Object> claims) {
this.subject = subject != null ? subject : this.subject;
this.issuedAt = issuedAt != null ? issuedAt : this.issuedAt;
this.expiration = expiration != null ? expiration : this.expiration;
this.claims = claims != null ? claims : this.claims;
}
}