하루인생 2021. 2. 22. 17:39

앞에서는setter를 통한 주입을 봤다면 이번에는 생성자를 통한 주입을 해보겠다.

 

스프링 4.3 이후부터는 @Autowired 없이 생성자를 통해 주입이 가능하다.

@Component
@Data
public class SampleHotel {
	private Chef chef;

	public SampleHotel(Chef chef) {
		this.chef = chef;
	}
}

 

@AllArgsConstructor를 사용하면 모든 인스턴스(필드)를 생성자에 주입할 수 있게해준다. 

코드가 간단해졌다. 

기본생성자가 필요하면 따로 생성할 필요가 있다. 

@Component
@Data
@AllArgsConstructor
public class SampleHotel {
	private Chef chef;
	private Restaurant restaurant;
		
}

 

 

@RequiredArgsConstructor는 @NonNull로 설정된 인스턴스만 생성자에 주입해준다. 

Restaurant는 @NonNull이 붙지 않아서 생성자에서 주입되지 않았다. 

@Component
@RequiredArgsConstructor
public class SampleHotel {
	@NonNull
	private Chef chef;
	private Restaurant restaurant;
}