머리말
Spring 프레임워크 AOP를 공부중에 Compoent와 Bean과의 차이가 뭔지 궁금하게 되어서 내용을 정리하는 시간을 갖고자 글을 작성하게 되었습니다.
@BEAN
주로 @Confiuration 어노테이션이 들어간 Spring을 설정하는 클래스 내에 들어가는 메소드에서 선언한다.
@Bean의 경우 보통은 외부 라이브러리를 사용해서 등록하고자 할때 사용합니다. 예를들면 ObejctMapper의 경우 ObjectMapper Class에 @Compoent를 선언 할수는 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.
ModelMapper를 사용하게 되어서 아래와 같이 ModelMapper를 Bean에 등록하였습니다. 😊
@Configuration
public class ModelMapperConfig {
@Bean
public ModelMapper modelMapper(){
return new ModelMapper();
}
}
@Compoent
싱글톤 클래스 빈을 생성하는 어노테이션이다. 물론 @Scope(”Prototype”) 어노테이션을 통해 싱글톤이 아닌 빈을 생성 할 수 도있다. 또한 @Service, @Repository 어노테이션 또한 이에 포함된다.
이 어노테이션은 선언적(Declarative)인 어노테이션이다. 즉, 패지키 스캔 안에 이 어노테이션은 “이 클래스를 정의 했으니 빈으로 등록해줘.” 라는 뜻이 된다. 개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Compoent를 사용한다.
그렇다면 개발자가 생성한 Class에 @Bean은 선언이 가능할까? 정답은 No이다. @Bean과 @Component는 각자 선언 할 수 있는 타입이 정해져있어 해당 용도외에는 컴파일 에러를 발생시킨다.
@Bean의 장점은 구현 클래스 인터페이스 기반 빈에 등록해주는 유연한 처리가 가능하다. Bean은 유연하게 인스턴스를 주입시킬 수 있으며, @Compoent는 클래스에 붙는 선언적인 어노테이션이기 때문에 유연하지 못하다.
![](https://blog.kakaocdn.net/dn/bUSWfS/btsFiQpznYY/vwuigiS9rXZcA3SBNlsjZ1/img.png)
정리
일반적인 당신은 빈 등록을 간편하게 하려면 @Component 어노테이션으로, 유연한 빈 등록이 필요하다면 @Configuration 어노테이션이 들어간 클래스 내 @Bean 어노테이션 메소드 선언으로 한다.
참고 : @SpringBootApplication 어노테인이 들어간 스프링 실행부에서도 @Bean 어노테이션이 깃든 메소드 등록이 가능히다
참고
Uploaded by N2T
'BackEnd > Java Spring' 카테고리의 다른 글
@Bean vs @Compoent (0) | 2024.03.10 |
---|---|
[Spring] WebSocket (1) | 2024.02.24 |