@Bean
- 빈(bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 S/W 컴포넌트
>> 스프링 컨테이너 [관리 : 자바 객체(Object) ]
- 빈은 인스턴스화된 객체를 의미
- 빈은 @Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록
강의 듣던 중 이해 안되었던 내용 기록
Test 에서 스프링 @Bean 을 사용하여 memberServiceV3_3() 메서드가 MemberServiceV3_3 클래스의 생성자를 통해 memberRepositoryV3() 생성자를 주입 받아서 사용하는 코드이다.
class MemberServiceV3_3Test {
public static final String MEMBER_A = "memberA";
public static final String MEMBER_B = "memberB";
public static final String MEMBER_EX = "ex";
@Autowired
private MemberRepositoryV3 memberRepository;
@Autowired
private MemberServiceV3_3 memberService;
@TestConfiguration
static class TestConfig {
@Bean
DataSource dataSource() {
return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
}
@Bean
PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
MemberRepositoryV3 memberRepositoryV3() {
return new MemberRepositoryV3(dataSource());
}
@Bean
MemberServiceV3_3 memberServiceV3_3() {
return new MemberServiceV3_3(memberRepositoryV3());
}
}
위의 코드의 @Bean 메서드 memberServiceV3_3() 는 MemberServiceV3_3 스프링 빈을 생성하고, 이 빈의 생성자에 memberRepositoryV3() 메서드를 통해 생성된 MemberRepositoryV3 빈을 주입한다. 이로 인해 MemberServiceV3_3 클래스의 인스턴스는 MemberRepositoryV3 객체의 기능을 사용 할 수 있게 되는 것이다.
@Bean
MemberServiceV3_3 memberServiceV3_3() {
return new MemberServiceV3_3(memberRepositoryV3());
}
이 메서드는 MemberServiceV3_3 타입의 빈을 생성하고 반환한다
매서드 내부에서 memberRepositoryV3() 메서드를 호출하여 MemberRepositoryV3 타입의 빈을 가져온다
memberRepositoryV3() 메서드는 MemberRepositoryV3 타입의 빈을 생성하고 반환한다.
[MemberServiceV3_3 생성자]
public MemberServiceV3_3(MemberRepositoryV3 memberRepository) {
this.memberRepository = memberRepository;
}
위와 같이 MemberServiceV3_3 생성자는 MemberRepository 타입의 객체를 받아 this.memberRepository 필드를 초기화 한다. 이로인해 MemberServiceV3_3 클래스의 인스턴스는 MemberRepositoryV3 객체의 기능을 사용할 수 있게 되는 것이다.
※ 정리 :
memberServiceV3_3() 메서드가 반환하는 MemberServiceV3_3 객체는 MemberRepositoryV3 빈은 생성자 주입을 통해 받아 사용한다.
따라서, MemberServiceV3_3 클래스 내의 메서드에서 this.memberRepository 를 통해 MemberRepositoryV3 의 기능을 호출 할 수 있게 되는데 이렇게 스프링의 의존성 주입(Dependency Injection)을 통해, MemberServiceV3_3 은 필요한 의존성 (MemberRepositoryV3) 을 쉽게 사용할 수 있게 되며, 이는 스프링의 제어의 역전(IoC) 및 의존성 주입의 핵심 개념이다.