public class MemberPrinter {
private DateTimeFormatter dateTimeFormatter;
public void print(Member member) {
if (dateTimeFormatter == null) {
System.out.printf(
"회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%tF\n",
member.getId(), member.getEmail(),
member.getName(), member.getRegisterDateTime());
} else {
System.out.printf(
"회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%s\n",
member.getId(), member.getEmail(),
member.getName(),
dateTimeFormatter.format(member.getRegisterDateTime()));
}
}
--첫번쨰 방법 java 8 의 Optional사용
@Autowired
public void setDateFormatter(DateTimeFormatter formatterOpt) {
if (formatterOpt.isPresent()) {
this.dateTimeFormatter = formatterOpt.get();
} else {
this.dateTimeFormatter = null;
}
}
--두번쨰 방법 @Nullable 애노테이션 사용
@Autowired
public void setDateFormatter(@Nullable DateTimeFormatter dateTimeFormatter) {
this.dateTimeFormatter = dateTimeFormatter;
}
--세번쨰 방법 @Autowired애노테이션의 required속성을 false로 바꾸는 방법
@Autowired(required = false)
public void setDateFormatter(DateTimeFormatter dateTimeFormatter) {
this.dateTimeFormatter = dateTimeFormatter;
}
}
@Autowired 애노테이션은 기본적으로 @Autowired 애노테이션을 붙인 타입에 해당하는 빈이 존재하지 않으면 익셉션을 발생한다. MemberPrinter는 setDateFormatter()메서드에 자동 주입할 빈이 존재하지않으면 익셉션이 발생하기보다는 그냥 dateTimeFormatter 필드가 null이 되면 된다.
@Autowired(required = false)와 @Nullable의 차이점
@Autowired(required = false)는 일치하는 빈이 존재하지 않을경우 자동 주입 대상에게 NULL값을 전달하지않는다.
반대로 @NULLable은 Null값을 주입한다.