티스토리 뷰

Spring

@Configuration의 역할과 싱글톤

shield 2023. 8. 14. 19:48
//앱 구성을 스프링으로 관리하기 위한 @Configuration
@Configuration
public class AppConfig {

    //스프링 컨테이너에 객체들을 관리 하기 위해 @Bean으로 등록
    //스프링 컨테이너에 등록된 객체들을 '스프링 빈' 이라고 한다
    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public DiscountPolicy discountPolicy() {
//        return new FixDiscountPolicy();
        return new RateDiscountPolicy();

    }
}

@Configuration은 비즈니스 요구사항에 따라 설계한 객체들을 스프링으로 관리하기 위해 삽입하는 어노테이션이다. 스프링 Config에는 이 어노테이션을 반드시 붙여야 스프링이 제공하는 온전한 기능을 이용할 수 있다.

 

앞서 스프링 컨테이너는 싱글톤 패턴을 보장한다고 했는데, 바로 @Configuration 덕분이다.

 

위의 코드에서 MemoryMemberRepository가 세 번 생성되지 않는 이유는, @Configuration으로 AppConfig의 자식 클래스인 AppConfig@CGLIB 클래스가 생성되고 그 클래스에서 @Bean이 붙은 메서드들의 중복 여부를 확인하여 등록되어 있으면 등록된 것을 반환하도록 로직 구현이 되어있기 때문이다. (AppConfig@CGLIB는 AppConfig를 조회하면 조회 가능하다)

 

@Configuration을 사용하지 않고 @Bean만으로 등록 가능하다. 하지만 싱글톤이 보장되지는 않는다. (@Autowired 를 이용해 의존 관계 자동 주입으로 해결할 수는 있다) 

 

참고: 김영한 - 스프링 핵심 기본원리(인프런)

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함