1.소개
Bean은 Spring 컨테이너에서 관리하는 객체를 의미한다.
일반적으로 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하면 Spring이 자동으로 빈을 생성하고 관리한다.
2. 특징
- Spring 컨테이너에서 관리
- 개발자가 직접 객체를 생성하는 것이 아닌 Spring이 생성하고 관리함.
- 싱글턴이 기본 적용
- 기본적으로 Spring Bean은 싱글턴(애플리케이션 실행 중 하나의 인스턴스만 생성)으로 관리된다.
- 의존성 주입 (DI) 지원
- @Autowired 등을 사용하여 필요한 곳에 자동으로 빈을 주입할 수 있다.
그냥 Spring Framework에서 대신 객체를 생성해주고 필요한 곳에 할당해주는 거라고 생각하면된다. 객체 == 빈
3. Bean 등록 방법
1) 어노테이션을 사용한 빈 등록 (Component Scan)
Spring Boot에서는 보통 자동 스캔 방식을 사용하여 빈을 등록한다.
@Component // 빈으로 등록됨
public class MyBean {
public void doSomething() {
System.out.println("Bean입니다");
}
}
@Component를 사용하면 Spring 컨테이너가 이 클래스를 빈으로 등록한다.
@Service, @Repository, @Controller는 @Component를 확장한 것
2) 직접 빈으로 등록하기 (@Configuration + @Bean)
@Bean을 사용하면 직접 빈을 등록할 수 있다.
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@Configuration 클래스에서 @Bean 메서드를 정의하면, 반환된 객체가 Spring 컨테이너에서 관리하는 빈이 된다.
3) XML을 이용한 빈 등록
xml 설정을 사용할 수도 있는데, 요즘은 거의 사용되지 않음
<beans>
<bean id="myBean" class="com.example.MyBean"/>
</beans>
id="myBean"으로 지정된 이름으로 빈을 가져올 수 있다.
4. Bean 사용하기 (의존성 주입)
1) @Autowired로 자동 주입
Spring이 알아서 MyBean 객체를 찾아서 넣어준다.
@Component
public class MyService {
private final MyBean myBean;
@Autowired // 자동으로 MyBean을 주입
public MyService(MyBean myBean) {
this.myBean = myBean;
}
public void execute() {
myBean.doSomething();
}
}
2) ApplicationContext로 직접 가져오기
Spring 컨테이너에서 Bean을 직접 가져올 수도 있다.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyBean myBean = context.getBean(MyBean.class);
myBean.doSomething();
5. Bean의 스코프
Bean은 기본적으로 싱글턴이지만, 필요에 따라 스코프를 변경할 수 있다.
스코프 종류 | 설명 |
singleton | 애플리케이션이 실행하는 동안 하나의 인스턴스만 생성됨 |
prototype | 요청할 때마다 새로운 객체가 생성됨 |
request | HTTP 요청마다 새로운 객체가 생성됨 |
session | HTTP 세션마다 하나의 객체가 생성됨 |
예제
@Component
@Scope("prototype")
public class PrototypeBean {
public PrototypeBean() {
System.out.println("Prototype Bean이다");
}
}
6. 정리
- Bean은 Spring 컨테이너가 관리하는 객체
- 어노테이션 (@Component, @Service, @Repository) 사용하면 자동 등록
- 직접 등록할 때는 @Bean 사용도 가능
- 싱글턴이 기본이고 @Scope로 변경 가능
- 의존성 주입을 통해 사용 가능
Spring에서는 모든 주요 객체를 Bean으로 관리하니까 Bean의 개념을 잘 알아놓자!
'Spring' 카테고리의 다른 글
[Spring] 스프링 부트 구조 정리 (0) | 2025.02.04 |
---|---|
[Spring] 동적으로 HTTP 상태 코드 설정 (0) | 2025.02.04 |
[Spring] JPA(Java Persistence API) (0) | 2025.02.04 |
[Spring] IoC, DI, AOP (0) | 2025.02.04 |
[Spring] 컴포넌트 스캔(Component Scan) 정리 (0) | 2025.02.04 |