반응형
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컨테이너란?
반응형
'Spring' 카테고리의 다른 글
[java] Jsonparser, Gson 사용법 및 예제 (0) | 2021.03.05 |
---|---|
[spring] spring과 객체지향의 원리 (0) | 2021.02.28 |
[spring] 객체지향 설계의 5가지 원칙 with spring (SOLID) (0) | 2021.02.22 |
[Jacoco] Jacoco 사용법 및 예제(maven) (0) | 2021.01.20 |
[Spring] 스프링 IOC(Inversion of Control)와 DI(Dependency Injection) (0) | 2021.01.14 |
댓글