Spring을 사용하다 보면 @Component와 @Bean을 사용헤보게 되고 둘 다 빈을 생성하는데 차이점에 대해서 궁금하게 되었습니다.
@Bean
@Configuration
public class TestConfiguration {
@Bean
public String name() {
return "MyName";
}
@Bean
public int age() {
return 25;
}
@Bean은 외부 라이브러리 또는 이미 정의되어 있는 객체들이 서로 종속성을 가지고 있을 경우의 빈 등록에 사용하는 어노테이션입니다. 또한 반환 값이 바로 Bean으로 등록되며 이미 정의된 기본 객체를 재정의하거나 내가 만든 객체의 종속성을 위해 빈을 등록할 때 사용합니다.
즉, 메소드 단위에서 개발자가 외부 라이브러리 및 개발자가 정의하지 않은 객체를 유연하게 넘기기 위해 사용하는 어노테이션입니다.
@Component
@Component
public class GameRunner {
private GamingConsole game;
public GameRunner(GamingConsole game) {
this.game = game;
}
public void run() {
System.out.println("Running game");
// 내용
}
}
개발자가 직접 정의한 객체 클래스 자체를 빈 등록할 때 사용하는 어노테이션이며 사용하기가 쉽습니다. 직접 정희한 객체 클래스에 사용하다 보니 Bean보다 많이 보게 되는 것 같습니다.
정리
결과 적으로 @Bean은 외부 라이브러리(ex. Spring 시큐리티 etc..)를 인스턴스화 하거나 빈 생성 전에 수행해야할 비지니스 로직이 많은 경우 권장이 되고 @Component는 위 경우를 제외한 대부분에 권장이 됩니다.
※ @Bean과 @Component를 반대로 사용할 경우 에러가 발생하여 실행이 되지 않습니다.
'코딩 공부 > web & Java' 카테고리의 다른 글
[Spring] Bean 스코프 (0) | 2023.10.05 |
---|---|
[Spring] 지연 초기화 (0) | 2023.10.04 |
[Spring] Spring Bean (0) | 2023.10.01 |
HTTP multipart/form-data (0) | 2023.06.29 |
[Web] HTTP 통신과 Socket 통신 (0) | 2023.06.21 |