Spring을 공부하면서 빈과 컴포넌트를 공부했는데 둘의 역할이 비슷한 느낌이기도 하고 어떤때에 뭘 써야 좋을지 제 나름의 기준이 서지 않았습니다. 그래서 빈과 컴포넌트의 정확한 역할과 둘의 차이점에 대해 알아보도록 하겠습니다.
# @Bean 이란?
@Bean 어노테이션은 개발자가 직접 스프링 빈(Bean)을 등록할 때 사용됩니다. @Bean 어노테이션은 메소드에 적용되며, 해당 메소드가 반환하는 객체를 스프링 빈으로 등록합니다. @Bean 어노테이션을 사용하면 개발자가 직접 빈을 생성하고 초기화할 수 있으므로, @Component 어노테이션보다 더 세밀한 제어가 가능합니다.
@Configuration
public class ExampleConfig {
@Bean
public ArrayList<String> array(){
return new ArrayList<String>();
}
}
# @Component 란?
스프링 컨테이너는 @Component 어노테이션이 적용된 클래스를 스캔하고, 객체를 생성하고 관리합니다. 사용자가 만든 임의의 클래스를 빈으로 등록시키기 위해 사용됩니다. 이후 해당 클래스를 호출할때 @Autowired를 사용하여 클래스의 기능을 사용할 수 있게됩니다.
@Service, @Controller, @Repository도 모두 @Component를 내장하고있습니다.
@Component
public class PasswordEncoder {
public String encode(String seed) {
return new BCryptPasswordEncoder().encode(seed);
}
public boolean matches(String seed, String password) {
return new BCryptPasswordEncoder().matches(seed, password);
}
}
# 그래서 차이점이 뭐야?
겉보기에는 똑같이 IoC 객체를 생성하는것처럼 보이지만 약간의 차이가 존재합니다.
@Component
- 클래스에 적용
- 개발자가 직접 작성한 class를 bean으로 등록
@Bean
- 메소드에 적용
- @Configuration 클래스 내부에서 사용
- 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용할 때
하지만 아직도 정확한 감이 오지 않습니다... 개발하다보면 깨닫게 되겠죠...?
# reference
https://withseungryu.tistory.com/64
https://medium.com/sjk5766/bean%EA%B3%BC-component-%EC%B0%A8%EC%9D%B4-96a8d0533bfd
chatgpt
'Back-end > Spring 기초개념' 카테고리의 다른 글
Instagram-clone 분석 (3) DTO (0) | 2023.04.23 |
---|---|
Instagram-clone 분석 (2) entity (3) | 2023.04.22 |
Instagram-clone 분석 (1) (2) | 2023.04.19 |
SOLID 5원칙 (0) | 2023.03.21 |
[JAVA] 내부 클래스, 내부 static 클래스의 역할 (0) | 2023.03.10 |