Spring - 스프링 빈
스프링 빈은 어디에 활용하는 것일까?
객체지향언어를 배우다보면 싱글톤 객체를 만들어 필요한 곳마다 찾아넣어주는 의존성 주입을 구현해본 적이 있을것이다.
이것을 간단화할 수 있는 @Autowired에 활용된다.
생성자에 @Autowired 어노테이션이 있다면 스프링이 연관된 객체는 스프링 Container가 찾아서 넣어준다.
스프링 빈을 등록하는 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때 싱글톤으로 등록한다. 즉, 스프링 빈을 의존성 주입 받으면 모두 같은 인스턴스이다. 설정으로 싱글톤이 아니게 할 수 있지만 대부분 기본값인 싱글톤을 사용한다.
1. 컴포넌트 스캔
@Component 어노테이션이 있다면 스프링 빈으로 자동 등록되는 것을 의미한다.
Controller에 @Controller 어노테이션, Service, Repository에도 각각 @Service, @Repository 어노테이션을 넣어주면 컴포넌트 스캔이 가능하다.
@Component를 넣지 않았는데 어떻게 컴포넌트 스캔이 가능할까?
@Controller, @Service, @Repository 어노테이션에는 @Component 어노테이션이 내장되어 있다.
컴포넌트 스캔의 장점은 간단한 사용방법이다. 기존 코드에 어노테이션을 추가만 한다면 의존성 주입이 가능하다.
2. 자바 코드로 직접 스프링 빈 등록
SpringApplication와 같은 루트에 config 파일을 만든 뒤 @Configuration과 @Bean을 통해 직접 스프링 빈을 등록할 수 있다.
직접 등록하는 이유는 인터페이스를 통해 다른 객체를 불러오고자 할 경우
간단히 수정할 수 있기 때문이다. 만약 이를 컴포넌트 스캔 방식으로 구현했다면 어노테이션을 지우고 다시 작성하고 등등 많은 코드가 반복될 것이다.