본문 바로가기
Spring

[Spring] 스프링 빈(Bean)이란?

by devjh 2021. 1. 14.
반응형

1. 스프링 빈(Bean)이란?

 

스프링의 진입점(main문)을 먼저 확인해 보겠습니다.

 

@SpringBootApplication
public class TestApplication {

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

}

스프링도 static한 메인문이 있고 이를 시작점으로 스프링이 시작 됩니다.

 

이제 http 메서드로 Controller의 메서드를 호출하면 컨트롤러를 타고 웹 서버의 로직이 진행 됩니다.

 

그런데 나는 new를 사용하여 컨트롤러를 생성해 준 적도 없고

 

해당 메인문은 깨끗하기만 한데 컨트롤러는 누가 만들어준걸까? 라는 의문점이 생깁니다.

 

 

 

 

2. 범인은 컴포넌트스캐닝

 

@SpringBootApplication을 추적해보겠습니다.

 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

.....

}

 

@SpringBootApplication에 들어갔더니 @ComponentScan이라는 어노테이션이 있습니다.

 

해당 어노테이션은 어노테이션 이름처럼 컴포넌트스캐닝을 하겠다는 어노테이션으로 아래와 같은 어노테이션이 붙은 클래스의 객체들을 하나 생성해서 IOC 컨테이너에서 관리하겠다는 의미입니다.(싱글턴기법처럼 객체를 하나만 생성합니다.)

  • @Component
  • @Repository
  • @Service
  • @Controller
  • @Configuration

혹은 @Configuration이 붙은 설정파일 클래스 내부에서 @Bean이라는 어노테이션을 사용하여 객체를 리턴하여 생성해 줄 수도 있으며, XML을 통해서도 만들어 줄 수있습니다.

 

 

 

3. 그래서 스프링 빈(Bean)이란?

 

스프링 빈이란 해당 어노테이션 붙어있는, 컴포넌트 스캐닝을 통해 생성된 클래스의 객체들을 말합니다.

 

해당 객체들은 단 하나만 생성되어 IOC 컨테이너에서 관리됩니다.

 

 

4. IOC컨테이너란?

 

IOC컨테이너란?

frozenpond.tistory.com/70

 

[Spring] IOC(Inversion of Control)와 DI(Dependency Injection)

1. IOC컨테이너란? 스프링 IOC 컨테이너란 컴포넌트 스캐닝된 객체를 생성해주고, 관리해 주는 곳 이다. 컴포넌트 스캐닝이란? frozenpond.tistory.com/71 [Spring] 스프링 빈(Bean)이란? 1. 스프링 빈(Bean)이란?

frozenpond.tistory.com

 

반응형

댓글