728x90
스프링 빈(Bean)
Spring의 DI Container에 의해 관리되는 POJO(Plain Old Java Object)
빈 등록 방법
1. 빈 설정 파일(Bean Configuration File)에 직접 등록(@Configuration, @Bean)
▶ 설정 클래스에서 @Bean 어노테이션을 사용해 수동으로 스프링 컨테이너에 빈을 등록
▶ @Bean을 사용하는 클래스에 @Configuration 사용하여 클래스에서 Bean을 등록하고자 함을 명시한다.
▶ @Bean을 사용하는 클래스에 @Configuration 사용하여 클래스에서 Bean을 등록하고자 함을 명시한다.
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
public SpringConfig(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
▶ @Configuration을 사용하는 이유
스프링 빈으로 등록된 다른 클래스 안에서 @Bean으로 직접 빈을 등록해는 것도 동작은 하지만 @Configuration 안에서 @Bean을 사용해야 싱글톤을 보장받을 수 있으므로 @Bean 어노테이션은 반드시 @Configuration과 함께 사용해야 한다.
▶ 스프링이 @Configuration을 따로 만든 이유는 CGLib으로 프록시 패턴을 적용해 수동으로 등록하는 스프링 빈이 반드시 싱글톤으로 생성됨을 보장하기 위해서이며, @Bean이 있는 메소드를 여러 번 호출하여도 항상 동일한 객체를 반환하여 싱글톤을 보장한다. 또한 스프링의 경우 @Component 스캔을 통해 자동으로 빈 등록을 하는 방식을 권장한다.
의도적으로 매번 다른 객체가 생성되기를 원한다면 @Configuration(proxyBeanMethods = false)로 해주면 된다.
설정 클래스에 대해서 프록시가 적용되지 않으며 모든 @Bean 메소드 호출마다 새로운 객체를 생성해준다.
수동으로 빈을 등록해야 하는 경우
1. 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때
2. 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때
3. 다형성을 활용하여 여러 구현체를 등록해주어야 할 때
@Component Annotation 사용
스프링의 경우 @Component 스캔을 통해 자동으로 빈 등록을 하는 방식을 권장
참고
728x90
'Spring' 카테고리의 다른 글
[Spring] Swagger 적용(Springboot 3.x) (0) | 2024.09.11 |
---|---|
[Spring] ERROR : Unable to find a single main class from the following candidates (0) | 2024.09.09 |
[Spring/JPA] jpa delete가 안될 때 (0) | 2024.08.16 |
[Spring/JPA] OSIV와 open-in-view (0) | 2024.08.12 |
[Spring Security] logout 할 때, GET /login?logout 해결 방법 (0) | 2024.08.02 |