스프링 컨테이너와 스프링 빈

지원·2026년 2월 25일

SpringBoot

목록 보기
6/17
post-thumbnail

스프링 컨테이너

  • 필요한 클래스를 연결해주는 역할
  • 서버 시작
    1. 스프링 컨테이너가 시작
    2. 기본 스프링 빈들이 등록
    3. 유저 스프링 빈 등록
    4. 의존성 자동 설정

IoC : 제어의 역전(Inversion Of Control)

  • 컨테이너가 선택해 BookService에 넣어주는 과정을 의존성 주입이라고 한다.
@Primary	//우선권
@Repository
public class BookMemoryRepository implements BookRepository{
	
    @Override
    public void saveBook() {
    }
}

스프링 빈

  • 서버가 시작되면, 스프링 서버 내부에 거대한 컨테이너(스프링 빈(클래스들))를 만들게 된다.
  • 등록법

@Configuration

클래스에 붙이는 어노테이션 
@Bean을 사용할 때 함께 사용해야함
외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 사용
ex) JdbcTemplate

@Bean

메소드에 붙이는 어노테이션
메소드에서 반환되는 객체를 스프링 빈에 등록한다.
외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때 사용

@Service

개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때 사용

@Repository

개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때 사용

@Component

주어진 클래스를 컴포넌트로 간주한다.
이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.
개발자가 직접 작성한 클래스를 스프링 빈으로 등록할 때 사용

@Qualifier

1. 주입받는 곳에 @Qualifier("클래스명") 입력
2. 스프링빈 입력할 때 특별한 별칭을 만든 뒤, 주입받는 곳에 @Qualifier("별칭") 방식도 가능

@Primary

의존성 주입시 우선시 되는 어노테이션

🚨@Qualifier VS @Primary
사용하는 쪽에서 직접 적어준 @Qualifier가 이긴다.

스프링 빈 주입 방법

  1. 생성자를 이용해 주입받는 방식(권장)
    📒기존 @Autowired를 사용했으나, 버전업 되면서 사라짐
  2. setter@Autowired 사용
    생성자 대신 setter를 사용하고 상단에 @Autowired 붙여줌
  3. 필드에 직접 @Autowired 사용
1-1. 생성자를 이용해 주입받는 방식 : 예시
@Service
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
1-2. 생성자를 이용해 주입받는 방식 : 예시 (lombok 사용시)
@Service
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
}

ApplicationContext

스프링이 만든 객체들을 관리하는 컨테이너

예시
ApplicationContext Context = SpringApplication.run(LibraryAppApplication.class, args);

SpringApplication.run(...)

실제로 스프링부트 앱을 실행하는 코드

예시
SpringApplication.run(LibraryAppApplication.class, args);
profile
개발 공부하는 김지원

0개의 댓글