스프링 컨테이너는 @SpringBootApplication에 의해 생성됨

@SpringBootApplication
public class MyApplication {

	public static void main(String[] args) {
		SpringApplication.run(MyApplication.class, args);
	}

}

스프링 컨테이너는 @Bean, @Component 로 마킹된 객체들을 컨테이너에 포함하며 싱글턴으로 관리하고

필요로 하는 곳에 주입함. 이 과정에서 주입받는 객체는 주입되는 객체가 먼저 초기화될 것을 요구하는데(주입되는 객체 뿐 아니라 내부에 별도로 선언된 빈도 포함), 순환 의존성 문제가 있을 경우 어플리케이션이 실행되지 않음

(@Controller, @Service, @Repository 등은 @Component을 포함)

DI (의존성 주입)

의존성 주입에 관해서는 여기에

[Spring] 서비스 객체 순환 참조 이슈

순환 의존성 관해서는 여기에