본문 바로가기
컴퓨터 프로그래밍/Spring

[Spring] Ioc Container 와 Bean

by 한33 2024. 8. 19.
  • 빈 (Bean): Spring이 관리하는 객체
  • Spring IoC 컨테이너: *Bean*을 모아둔 컨테이너

 

@Component 를 클래스 위에 붙여주면 첫 번째 대문자가 소문자로 바뀐 memoService 이름으로 Bean 저장됨

 

@Autowired

  • Spring IoC 컨테이너에 의해 관리되는 클래스에서만 가능합니다.

필드 위에 @Autowired

 

 

'Bean'을 주입할 때 사용할 메서드 위에 @Autowired

  • 객체의 불변성을 확보할 수 있기 때문에 일반적으로는 생성자를 사용하여 DI하는 것이 좋음
  • set… Method를 만들고 @Autowired를 적용하여 DI 할 수도 있음
  • 생성자 선언이 1 개라면 생략 가능

ApplicationContext

  • ApplicationContext는 BeanFactory등을 상속하여 기능을 확장한 Container
    • BeanFactory는 ‘Bean’ 의 생성, 관계설정등의 제어를 담당하는 IoC 객체
@Component
public class MemoService {

    private final MemoRepository memoRepository;

    public MemoService(ApplicationContext context) {
        // 1.'Bean' 이름으로 가져오기
        MemoRepository memoRepository = (MemoRepository) context.getBean("memoRepository");

        // 2.'Bean' 클래스 형식으로 가져오기
        // MemoRepository memoRepository = context.getBean(MemoRepository.class);

        this.memoRepository = memoRepository;
    }

       ...
}

3 Layer Annotation

  1. @Controller, @RestController
  2. @Service
  3. @Repository