빈(Bean)이란
Spring IoC컨테이너에 의해 관리되는 객체를 의미한다
Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다
특징
1. 생성 및 관리
- Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다
- 개발자가 직접 객체를 생성하고 관리할 필요가 없다
2. 의존성 주입(DI)
- 빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다
3. 싱글톤 기본 설정
- Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)
4. 구성 파일 또는 어노테이션으로 정의
- XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다
Spring Bean의 생성 방법
1. XML 기반 설정
- XML 파일에서 `<bean>` 태그를 사용하여 빈 정의
<bean id="myBean" class="com.example.MyClass"/>
2. Java Config 기반 설정
- `@Configuration`과 `@Bean`어노테이션 사용
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass();
}
}
3. 어노테이션 기반 설정
- `@Component`, `@Service`, `@Repository`, `@Controller` 등의 어노테이션으로 빈 자동 등록
- `@ComponentScan`으로 패키지를 스캔하여 등록
@Component
public class MyBean {
// 빈으로 관리되는 클래스
}
Spring Bean의 주요 어노테이션
1. @Component
- 일반적인 빈 등록에 사용
2. @Service
- 서비스 계층 클래스에서 사용
3. @Repository
- 데이터 액세스 계층에서 사용하며, 예외를 스프링 예외로 변환하는 역할
4. @Controller / @RestController
- 웹 컨트롤러 계층에서 사용
5. @Bean
- 메서드 레벨에서 Bean을 등록할 때 사용
Spring Bean의 스코프
빈의 스코프는 빈의 생명주기를 정의한다
1. 싱글톤(기본값)
- 애플리케이션 내에서 Bean의 단일 인스턴스를 공유
@Scope("singleton")
2. 프로토타입
- 요청마다 새로운 Bean 인스턴스를 생성
@Scope("prototype")
3. 웹 관련 스코프
- request : HTTP 요청마다 새로운 인스턴스 생성
- session : HTTP 세션마다 새로운 인스턴스 생성
- application : 애플리케이션 범위의 빈 생성
Spring Bean의 생명 주기
- 객체 생성:
- 컨테이너가 빈의 인스턴스를 생성
- 의존성 주입:
- 빈에 필요한 의존 객체를 주입
- 초기화 메서드 호출:
- 초기화 로직을 포함한 메서드를 실행
- 사용:
- 빈이 애플리케이션 내에서 사용됨
- 소멸 메서드 호출:
- 컨테이너 종료 시 빈의 소멸 메서드를 호출
예제
Bean 정의 및 사용
@Component
public class MyService {
public void doSomething() {
System.out.println("Service is working!");
}
}
@RestController
public class MyController {
private final MyService myService;
@Autowired
public MyController(MyService myService) {
this.myService = myService;
}
@GetMapping("/test")
public String test() {
myService.doSomething();
return "Test successful!";
}
}
Spring Bean이 중요한 이유
- 모듈화와 재사용성: 객체를 분리하여 설계하면 각 컴포넌트를 독립적으로 테스트하고 재사용 가능
- IoC와 DI 지원: 객체 생성을 컨테이너가 관리함으로써 애플리케이션의 의존성을 유연하게 관리
- 유지보수성 향상: 코드 변경 시 영향을 최소화하며, 구조를 이해하기 쉽도록 설계 가능
Spring에서 빈은 애플리케이션의 핵심 구성 요소로, IoC와 DI를 통해 효율적이고 확장 가능한 애플리케이션을 개발하는 데 필수적
출처 : ChatGPT
'BE > Spring & Spring Boot' 카테고리의 다른 글
[Spring Boot] Eager, Lazy (0) | 2024.12.21 |
---|---|
[Spring Boot] IoC 컨테이너 (2) | 2024.12.21 |
[Spring Boot] ApplicationRunner (0) | 2024.12.14 |
[Spring Boot] ORM, @Query (1) | 2024.12.14 |
[Spring] Spring 과 Spring Boot (0) | 2024.12.13 |