새소식

인기 검색어

개인공부/SPRING

객체 자동주입할 떄 해당하는 빈 객체가 없을 시 예외가아닌 null값으로 대체하는 방법(@Nullable)

  • -
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값을 주입한다.

 

'개인공부 > SPRING' 카테고리의 다른 글

AOP PointCut 표현식  (0) 2022.10.09
[Spring] 스프링 AOP (Spring AOP)란?  (2) 2022.10.09
@Qualifier 애노테이션  (1) 2022.10.08
@Autowired 애노테이션  (0) 2022.10.08
@Bean vs @Component 차이  (1) 2022.10.08
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.