@Autowired 어노테이션의 필수 여부

이연희·2022년 7월 7일
0

Spring

목록 보기
78/105

@Autowired 어노테이션의 필수 여부

자동 주입 대상이 필수가 아닌 경우(null 값이 들어가도 되는 경우)에는 @Autowired 어노테이션을 false로 설정하면 된다. 매칭되는 빈이 없어도 익셉션이 발생하지 않으며 자동 주입을 수행하지 않는다. 아래 코드에서 DateTimeFormatter 타입의 빈이 존재하지 않으면 익셉션이 발생하지 않고 setDateFormatter() 메서드를 실행하지 않는다.

@Autowired(required=false)
public void setDateFormateer(DateTimeFormatter dateTimeFormatter){
	this.dateTimeFormatter =dateTimeFormatter;
}

다음과 같이 의존 주입 대상에 자바8의 Optional을 사용해도 된다. 자동 주입 대상 타입이 Optional일 경우 일치하는 빈이 존재하지 않으면 값이 없는 Optional을 인자로 전달한다. 찾는 빈이 있으면 값이 있는 Optional을 인자로 전달한다.

@Autowired
public void setDateFormateer(Optional<DateTimeFormatter> dateTimeFormatter){
	this.dateTimeFormatter =dateTimeFormatter;
}

@Nullable 어노테이션을 이용하는 방법도 있다. 스프링 컨테이너는 세터 메서드를 호출할 때 자동 주입할 빈이 존재하면 해당 빈을 인자로 전달하고, 존재하지 않으면 null을 인자로 전달한다.

@Autowired
public void setDateFormateer(@Nullable DateTimeFormatter dateTimeFormatter){
	this.dateTimeFormatter =dateTimeFormatter;
}

앞서 언급한 세 가지 방식은 필드에도 그대로 적용된다.

//1
@Autowired(required=false) 
private DateTimeFormatter dateTimeFormatter;
//2
@Autowired 
private Optional<DateTimeFormatter> dateTimeFormatter;
//3
@Autowired
@Nullable
private DateTimeFormatter dateTimeFormatter;
profile
공부기록

0개의 댓글