Spring Boot에서 @Bean과 @Component 어노테이션의 차이
안녕하세요 부자되는 매직TV 입니다.
Spring Boot에서 @Bean과 @Component 어노테이션은 모두 Spring Container에 Bean을 등록하는 데 사용되는 어노테이션입니다.
하지만 두 어노테이션에는 몇 가지 차이점이 있습니다.
오늘 티스토리에서는 해당 내용을 다뤄보고자 합니다.
그럼 시작해볼까요?
@Component 어노테이션
@Component 어노테이션은 Spring Container에 Bean을 등록하는 데 가장 일반적으로 사용되는 어노테이션입니다.
@Component 어노테이션은 클래스 레벨에 적용되며, 해당 클래스를 Bean으로 등록합니다.
예를 들어, 다음 코드는 MyMagicBean 클래스를 Bean으로 등록합니다.
@Component
public class MyMagicBean {
public void hello() {
System.out.println("Hello, Magic world!");
}
}
Component 어노테이션은 Spring의 자동 Bean 등록 기능과 호환됩니다.
즉, Spring Boot 애플리케이션을 실행하면 Spring Container는 @Component 어노테이션이 적용된 모든 클래스를 자동으로 Bean으로 등록합니다.
그럼, 이어서, @Bean 어노테이션에 대해서 알아보겠습니다.
@Bean 어노테이션
@Bean 어노테이션은 특정 Bean을 명시적으로 등록하는 데 사용됩니다.
@Bean 어노테이션은 메서드 레벨에 적용되며, 해당 메서드의 반환 값을 Bean으로 등록합니다.
예를 들어, 다음 코드는 MyBean 클래스를 Bean으로 등록합니다.
@Bean
public MyMagicBean myMagicBean() {
return new MyMagicBean();
}
@Bean 어노테이션은 Spring의 자동 Bean 등록 기능과 호환되지 않습니다.
즉, Spring Boot 애플리케이션을 실행하면 Spring Container는 @Bean 어노테이션이 적용된 메서드를 자동으로 호출하지 않습니다.
차이점 요약
특징 | @ Component | @Bean |
적용 위치 | 클래스 레벨 | 메소드 레벨 |
자동 Bean 등록 | 호환됨 | 호환안됨 |
사용 용도 | 일반적인 Bean 등록 | 특정 Bean 명시적 등록 |
Example Code
예제 코드를 작성해 보자면 아래와 같습니다.
@SpringBootApplication
public class MagicApplication {
public static void main(String[] args) {
SpringApplication.run(MagicApplication.class, args);
}
@Bean
public MyMagicBean myMagicBean() {
return new MyMagicBean();
}
}
@Component
public class MyMagicBean {
public void hello() {
System.out.println("Hello, Magic world!");
}
}
위의 코드를 실행하면 아래와 같이 출력됩니다.
Hello, Magic world!
@Bean 어노테이션이 적용된 myMagicBean() 메서드는 Spring Container에 MyMagicBean 클래스를 Bean으로 등록합니다.
@Component 어노테이션이 적용된 MyBean 클래스는 Spring Container에 Bean으로 자동으로 등록됩니다.
따라서 두 경우 모두 MyMagicBean 클래스의 hello() 메서드가 호출됩니다.
맺음말
@Bean과 @Component 어노테이션은 모두 Spring Container에 Bean을 등록하는 데 사용되는 어노테이션입니다.
하지만 두 어노테이션에는 몇 가지 차이점이 있습니다.
@Component 어노테이션은 Spring의 자동 Bean 등록 기능과 호환됩니다.
@Bean 어노테이션은 Spring의 자동 Bean 등록 기능과 호환되지 않습니다.
따라서,
일반적인 Bean을 등록할 때는 @Component 어노테이션을 사용하고,
특정 Bean을 명시적으로 등록해야 할 때는 @Bean 어노테이션을 사용하면 됩니다.
오늘의 티스토리는 여기까지고요.
항상 믿고 봐주셔서 감사합니다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
QueryDSL에서의 @QueryProjection 어노테이션 깔끔정리 (0) | 2024.01.11 |
---|---|
인텔리제이(intellij) 에서 실행가능한 Jar 생성하는 방법 깔끔정리 (0) | 2023.05.18 |
마이크로서비스에서 구성관리(configuration management) 깔끔정리 (ft. Git을 활용한 간단한 스프링 클라우드 컨피그 서버 구축) (0) | 2023.04.07 |
AOP(Aspect-Oriented Programming) 깔끔하게 정리하기 (0) | 2023.03.28 |
Lombok 관련 @Builder 와 @Accessors 의미 깔끔하게 정리하기 (0) | 2022.06.14 |