Java/Spring

Spring - 스프링 빈

뽀루피 2024. 7. 23. 19:38

스프링 빈은 어디에 활용하는 것일까?

객체지향언어를 배우다보면 싱글톤 객체를 만들어 필요한 곳마다 찾아넣어주는 의존성 주입을 구현해본 적이 있을것이다.

이것을 간단화할 수 있는 @Autowired에 활용된다.

생성자에 @Autowired 어노테이션이 있다면 스프링이 연관된 객체는 스프링 Container가 찾아서 넣어준다.

 

 

스프링 빈을 등록하는 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기

스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 싱글톤으로 등록한다. 즉, 스프링 빈을 의존성 주입 받으면 모두 같은 인스턴스이다. 설정으로 싱글톤이 아니게 할 수 있지만 대부분 기본값인 싱글톤을 사용한다.

 

 

1. 컴포넌트 스캔

@Component 어노테이션이 있다면 스프링 빈으로 자동 등록되는 것을 의미한다.

 

Controller에 @Controller 어노테이션, Service, Repository에도 각각 @Service, @Repository 어노테이션을 넣어주면 컴포넌트 스캔이 가능하다.

@Component를 넣지 않았는데 어떻게 컴포넌트 스캔이 가능할까?

@Controller, @Service, @Repository 어노테이션에는 @Component 어노테이션이 내장되어 있다.

@Controller 내에 @Component가 있는 모습

 

컴포넌트 스캔의 장점은 간단한 사용방법이다. 기존 코드에 어노테이션을 추가만 한다면 의존성 주입이 가능하다.

 

 

2. 자바 코드로 직접 스프링 빈 등록

 

SpringApplication와 같은 루트에 config 파일을 만든 뒤 @Configuration과 @Bean을 통해 직접 스프링 빈을 등록할 수 있다.

직접 등록하는 이유는 인터페이스를 통해 다른 객체를 불러오고자 할 경우 

선택된 부분만 변경해도 Bean 등록을 변경할 수 있다.

 

간단히 수정할 수 있기 때문이다. 만약 이를 컴포넌트 스캔 방식으로 구현했다면 어노테이션을 지우고 다시 작성하고 등등 많은 코드가 반복될 것이다.