반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- sumof
- kotlin
- Token
- Spring Boot
- 자바
- java
- JPA
- 스프링
- JPQL
- map
- 코틀린
- Spring
- javamailsender
- 티스토리챌린지
- 웹서버오류
- 서버실행실패
- 스프링 부트
- devpi
- JWT
- api인증
- filternotnull
- 8080error
- 토큰기반인증
- 토큰
- 오블완
- portconflict
- foreachindexed
- entity
- 객체지향
- Stream
Archives
- Today
- Total
DeveloPiano
[Spring] @Bean, @Component, @Configuration 이란 본문
반응형
Spring Framework에서는 객체를 스프링 빈(Sprint Bean)으로 관리하여 의존성 주입(DI)을 통해 애플리케이션을 구성합니다. 이를 위해 다양한 어노테이션을 제공하며, 그중 대표적으로 @Bean, @Component, @Configuration 어노테이션이 있습니다. 이들은 객체를 스프링 컨테이너에 등록하고 관리하는 데 중요한 역할을 합니다. 각각의 역할과 차이점에 대해 알아보겠습니다.
1. @Component
개요
- @Component는 클래스 수준에서 사용하는 어노테이션으로, Spring이 해당 클래스를 빈으로 자동 등록하도록 합니다.
- 컴포넌트 스캔(Component Scan)을 통해 Spring이 @Component가 붙은 클래스를 찾아서 빈으로 생성하고 컨테이너에 등록합니다.
특징
- @Component는 Spring이 자동으로 감지하여 관리할 수 있는 빈을 생성하는 기본적인 어노테이션입니다.
- 컨트롤러, 서비스, 리포지토리 등 여러 계층에서 사용할 수 있습니다.
- Spring에서 제공하는 특화된 어노테이션(@Controller, @Service, @Repository)들도 사실상 @Component의 확장판으로, 역할에 따라 더 명확하게 구분하기 위해 사용됩니다.
사용 예시
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Component is working");
}
}
위 코드에서 @Component는 MyComponent 클래스를 빈으로 등록하며, 의존성 주입을 통해 다른 클래스에서 사용할 수 있습니다.
2. @Bean
개요
- @Bean은 메서드 수준에서 사용되는 어노테이션으로, 해당 메서드가 반환하는 객체를 스프링 빈으로 등록합니다.
- 주로 Java Configuration 클래스(예: @Configuration이 붙은 클래스) 내에서 사용하며, 특정 메서드의 리턴 값을 빈으로 등록하고자 할 때 사용됩니다.
특징
- 개발자가 직접 생성한 인스턴스를 빈으로 등록하고자 할 때 유용합니다.
- 객체 생성 로직을 세밀하게 제어할 수 있으며, 외부 라이브러리에서 제공되는 클래스 등을 빈으로 등록하고 싶을 때도 사용할 수 있습니다.
- @Bean을 사용해 정의된 메서드는 싱글톤으로 관리되며, 스프링 컨테이너가 한 번만 호출하여 빈을 생성합니다.
사용 예시
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyComponent myComponent() {
return new MyComponent();
}
}
위 예시에서는 myComponent라는 이름으로 MyComponent 인스턴스를 빈으로 등록합니다. 이 빈은 애플리케이션 어디서든 의존성 주입을 통해 사용할 수 있습니다.
3. @Configuration
개요
- @Configuration은 클래스 수준에서 사용되는 어노테이션으로, 해당 클래스가 스프링 컨테이너에 의해 하나 이상의 빈을 정의하는 설정 파일임을 나타냅니다.
- 일반적으로 @Bean 메서드들을 포함한 Java Configuration 클래스에 사용되며, 애플리케이션 컨텍스트가 이 클래스의 빈 정의를 처리할 수 있도록 합니다.
특징
- @Configuration이 붙은 클래스 내의 @Bean 메서드는 자동으로 싱글톤으로 관리됩니다.
- @Configuration이 붙은 클래스는 프로토타입 빈을 생성하지 않으며, 여러 번 호출해도 동일한 인스턴스를 반환하도록 설계됩니다.
- Spring에서는 XML 기반 설정을 Java 기반으로 대체하기 위해 @Configuration을 많이 사용합니다.
사용 예시
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyComponent myComponent() {
return new MyComponent();
}
@Bean
public MyService myService() {
return new MyService(myComponent()); // MyComponent 빈을 주입하여 생성
}
}
위 예시에서는 @Configuration을 통해 AppConfig 클래스가 설정 클래스임을 나타내고, 내부에 정의된 @Bean 메서드들이 스프링 컨테이너에 의해 관리되도록 합니다.
@Component, @Bean, @Configuration의 차이점
어노테이션 | 용도 | 위치 | 설명 |
@Component | 컴포넌트 스캔을 통해 자동으로 빈 등록 | Class | 기본적인 빈 정의를 위한 어노테이션으로, 특정 역할을 구체화하기 위해 @Service, @Repository와 같은 어노테이션으로 확장됩니다. |
@Bean | 특정 메서드의 리턴 객체를 빈으로 등록 | Method | 외부 라이브러리나 인스턴스화 로직이 필요한 클래스 등을 빈으로 등록할 때 주로 사용합니다. |
@Configuration | 자바 기반의 설정 클래스 | Class | 클래스 내에 여러 @Bean 메서드를 포함하여, 설정 파일처럼 사용될 때 주로 사용합니다. |
언제 사용해야 할까?
- @Component
- Spring이 자동으로 관리해야 하는 빈을 간단히 정의하고 싶을 때 사용합니다.
- 주로 서비스 클래스, 리포지토리 클래스, 유틸리티 클래스 등을 정의할 때 사용됩니다.
- 예: @Service, @Repository, @Controller
- @Bean
- 외부 라이브러리의 클래스와 같이 소스 코드에 직접 수정할 수 없는 클래스를 빈으로 등록하고자 할 때 유용합니다.
- 또는 특정 인스턴스 생성 로직이 필요할 때 사용합니다.
- @Configuration 클래스 내에서 @Bean 메서드를 정의하여, 객체 생성의 세부 사항을 조정할 수 있습니다.
- @Configuration
- 전체 애플리케이션에 대해 여러 빈을 설정하고 관리할 때 사용합니다.
- @Bean 메서드와 함께 자주 사용되며, Java 기반 설정을 구성하는 파일로 사용됩니다.
- Spring에서 XML 기반 설정을 대체하는 Java 설정 클래스로 유용합니다.
요약
- @Component : 클래스 수준에서 사용하며, 스프링 컴포넌트 스캔을 통해 자동으로 빈 등록을 수행합니다.
- @Bean : 메서드 수준에서 사용하며, 메서드가 반환하는 객체를 스프링 빈으로 등록합니다.
- @Configuration : 클래스 수준에서 사용하며, 여러 @Bean을 포함하는 Java 설정 클래스임을 나타냅니다.
이 어노테이션들을 이해하고 적절하게 사용하면, 애플리케이션의 의존성을 효율적으로 관리하고 유지 보수성을 높일 수 있습니다.
반응형
'Develop > Spring' 카테고리의 다른 글
Web server failed to start: Port 8080 was already in use 에러 해결 방법 (0) | 2025.03.31 |
---|---|
[Spring Boot] @EmbeddedId - JPA에서 복합 키를 사용하는 방법 (0) | 2024.10.24 |
[Spring] JPA Pageable로 페이징 구현하기 (0) | 2024.10.17 |
[Spring] Spring Boot 에서 Scheduler 사용하기 (0) | 2024.09.24 |
[Spring] JPQL, QueryDSL : 기본 개념과 사용 예시 (0) | 2024.09.20 |