본문 바로가기
I LEARNED/TIL

TIL_ 스프링 IOC 컨테이너 -빈등록

by veganwithbacon 2022. 8. 5.
반응형

스프링 IoC 컨테이너

 DI를 사용하기 위해서는 객체 생성이 우선 되어야 하는데 이것을 생성해주는 것이 스프링이다.

 필요한 객체를 생성하여 관리하는 역할을 대신해준다.

 

- 빈(Bean) : 스프링이 관리하는 객체

- 스프링 IoC 컨테이너 : '빈'을 모아둔 통

 

스프링 IOC컨테이너에 어떻게 빈을 등록하고 사용하는지 알아보자

 

스프링 '빈' 등록 방법

1.  @Component 

       >클래스 선언 위에 설정

@Component
public class ProductService { ... }

        

       >스프링 서버가 뜰 때 스프링 IoC에 '빈' 저장

             @Component 클래스에 대해서 스프링이 해주는 일          

// 1. ProductService 객체 생성
ProductService productService = new ProductService();

// 2. 스프링 IoC 컨테이너에 빈 (productService) 저장
// productService -> 스프링 IoC 컨테이너

           >스프링 '빈' 이름 : 클래스의 앞글자만 소문자로 변경

                     ex)public class ProductService => productService

 

           > '빈' 아이콘 확인  => 스프링 IoC에서 관리할 '빈' 클래스라는 표시

 

 

           > @Component 적용 조건

                    - @ComponentScan 에 설정해 준 packages 위치와 하위 packages들

@Configuration
@ComponentScan(basePackages = "com.sparta.springcore")
class BeanConfig { ... }

                    - @SpringBootApplication 에 의해 default 설정이 되어 있음

 

 

 

2. @Bean

       > 직접 객체를 생성하여 빈으로 등록요청

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfiguration {

    @Bean
    public ProductRepository productRepository() {
        String dbUrl = "jdbc:h2:mem:springcoredb";
        String dbId = "sa";
        String dbPassword = "";

        return new ProductRepository(dbUrl, dbId, dbPassword);
    }
}

 

      >스프링 서버가 뜰 때 스프링 IoC에 '빈'  저장

// 1. @Bean 설정된 함수 호출
ProductRepository productRepository = beanConfiguration.productRepository();

// 2. 스프링 IoC 컨테이너에 빈 (productRepository) 저장
// productRepository -> 스프링 IoC 컨테이너

            - 스프링 '빈' 이름 : @Bean이 설정된 함수명

                        public ProductRepository productRepository() {..} =>productRepository

 

            - '빈' 아이콘 확인 → 스프링 IoC 에 '빈' 에 등록될 것이라는 표시

반응형

'I LEARNED > TIL' 카테고리의 다른 글

TIL_@Column #Spring  (0) 2022.08.07
TIL_@RequestMapping #Spring  (0) 2022.08.06
TIL_ 스프링 IOC 컨테이너 -빈 사용방법  (0) 2022.08.05
TIL_ResponseBody #Spring  (0) 2022.08.04
[TIL] SpringMVC동작이해  (0) 2022.08.04

댓글