반응형
@Configuration이 붙은 AppConfig에서 Bean을 등록하고 생성자 주입 구현
각 객체가 참조하는 인터페이스에서 @Autowired 없어도 @Configuration을 통해 설정한 Bean이 컨테이너에 등록된 후
return 형식에 정의 된대로 자동 주입을 해준다.
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
@Configuration
public class AppConfig {
@Bean
public MemberService memberService()
{
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService()
{
return new OrderServiceImpl(memberRepository(),discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
}
Controller에서 MemberService 의존하며, @Autowired로 주입 받는다하면 @Bean으로 등록된 MemberService의 반환 객체인 MeberServiceImpl이 주입될 것이다.
만약 객체에서 자동 주입받는 경우 외에 Bean으로 등록된 것을 직접 찾아 쓰는 경우 컨테이너에서 직접 조회가 가능하다.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
ApplicationContext는 컨테이너를 의미하며, AnnotationConfig... 객체에 Configuration 파일을 넣어줬을 때 설정된 대로 읽어와서 참조 가능
반응형
'Spring' 카테고리의 다른 글
DB 접근 기술 (0) | 2023.07.29 |
---|---|
OCP 적용 DI 구조 (0) | 2023.07.29 |
Spring boot traffic 제어 + redirect (0) | 2021.09.02 |
Sentry + Spring Boot (monitoring tool) (0) | 2021.08.31 |
Spring 에러 전역 처리 (0) | 2021.08.31 |