본문 바로가기

Spring

스프링 컨테이너 ApplicationContext

반응형

@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