스프링이 개발자 대신 객체를 관리하기 위해서는 객체가 Bean 으로 등록이 되어있어야 한다. 과거에는 Bean 을 등록하기 위해 xml 파일을 작성하였는데, 이제는 어노테이션으로 편리하게 등록할 수 있는 방법으로 관리할 수 있다.
스프링에는 @Bean 이나 @Component 로 Bean 객체를 등록할 수 있는 방법이 있다.
@Bean
수동으로 스프링 컨테이너에 bean 을 등록하는 방법이다. @Bean 은 메서드 레벨의 어노테이션이며, 메서드의 return 객체가 bean 으로 등록된다. 메서드 레벨에 작성 가능하다는 것은 외부의 객체를 불러와서 Bean 으로 등록할 수 있다는 것이다.
그렇다면 메서드 레벨에 존재하는 @Bean 을 실행시킬 수 있는 방법은 무엇일까? 바로 스프링에게 '이 클래스는 bean 을 등록하고 있다' 고 알려주는 @Configuration 어노테이션이다. 스프링 컨테이너는 @Configuration이 붙어있는 클래스를 자동으로 bean 으로 등록해두고, 해당 클래스를 파싱해서 @Bean 어노테이션이 있는 메서드를 찾아서 bean 을 생성해준다. @Configuration 은 내부적으로 @Component 를 포함하고 있기 때문에 스프링이 인식할 수 있다. 그래서 @Bean 어노테이션을 이용해서 bean을 수동으로 등록하려면 꼭 클래스 상단에 @Configuration 어노테이션이 등록되어 있어야 한다.
@Bean 어노테이션의 경우 수동으로 직접 bean 을 등록해줘야 하는 상황인데, 주로 다음과 같을 때 사용한다.
- 개발자가 직접 제어 불가능한 라이브러리를 활용할 때
- 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
- 다형성을 활용하여 여러 구현체를 등록할 때 (소스 코드를 찾아볼 필요 없이 해당 @Configuration 클래스만 보면 되기 때문에 한 눈에 파악하여 유지보수하기 좋기 때문)
추가로, @Bean 을 사용해 수동으로 bean 을 등록해줄 때에는 메서드 이름으로 bean 이름이 결정되기 때문에 중복된 bean 이름이 존재하지 않도록 주의해야 한다.
@Component
자동으로 스프링 컨테이너에 bean 을 등록하는 방법이다. @Bean 처럼 수동으로 직접 빈을 하나 하나 등록하는 작업은 빈으로 등록하는 클래스가 많아질수록 상당히 많은 시간이 소요된다. 하지만 @Bean 과는 다르게 @Component 는 클래스 레벨에 사용되어, 해당 클래스 자체가 런타임에서 Component scan 기능을 통해 bean 객체로 등록된다. @Component 의 경우 개발자가 만든 클래스를 bean 객체로 등록시킬 때 사용하면 편한데, 해당 클래스에 있는 @Component만 보면 해당 빈이 등록되도록 잘 설정되었는지를 바로 파악할 수 있기 때문이다. 스프링은 기본적으로 Component scan 을 이용한 자동 bean 등록 방식을 권장한다.
@Component 를 갖는 어노테이션으로 @Controller, @Service, @Repository 등이 있다. 위에 언급했지만 @Configuration 도 @Component 어노테이션을 가지고 있다.
추가로 @Component를 이용한다면 Main 또는 App 클래스에서 Component Scan 으로 컴포넌트를 찾는 탐색 범위를 지정해주어야 한다. 하지만 SpringBoot를 이용중이라면 @SpringBootConfiguration 하위에 기본적으로 포함되어 있어 별도의 설정이 필요 없다.
참고 :
Spring @Component Annotation | Baeldung
Learn about the Spring @Component annotation.
www.baeldung.com
[Spring] Bean이란 무엇일까?
1. Spring Bean이란? DI/IoC에 의해 우리는 스프링에게 객체의 생명주기를 스프링에게 맡기게 된다. 이로인해 스프링은 필요한 객체들을 Spring Container(IoC Container, Application Context)에 생성하고 생성한 객
seongwon.dev
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)
기존의 Spring MVC에서는 xml을 활용하여 Bean을 등록하고 있었다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 상당히 번거로워 져서 어노테이션(Annotation, @)를 활
mangkyu.tistory.com
'TIL' 카테고리의 다른 글
암호 기법 간단 분류 (22.11.01 TIL) (0) | 2022.11.01 |
---|---|
토큰 기반 인증 (22.10.31 TIL) (0) | 2022.10.31 |
JAVA Stream (스트림) (22.10.29 TIL) (0) | 2022.10.29 |
미래 그려보기 (22.10.28 TIL) (0) | 2022.10.28 |
findById vs getReferenceById 차이(22.10.27 TIL) (0) | 2022.10.27 |
댓글