스프링/1. 스프링 핵심 원리

18강. 스프링으로 변환

sdafdq 2023. 7. 16. 19:23
@Configuration
public class AppConfig {
    @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 RateDiscountPolicy();
    }
}

아마 이 @Bean들이 싱글톤? 객체니까 레퍼런스로? 하나씩 다 컨테이너에 등록될 듯.

 

 

public class MemberApp {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        MemberService memberService = applicationContext.getBean("memberService",MemberService.class);

        Member member1 = new Member(1L, "kim", Grade.BASIC);
        memberService.join(member1);

        Member findMember = memberService.findMember(1L);
        System.out.println("findMember = " + findMember.getName());
        System.out.println("member1 = " + member1.getName());
    }
}

ApplicationContext 이게 컨테이너라고 보면 됨.

모든 Bean 관리

Annotation 주석기반으로 ConfigApp 한 컨테이너

AppConfig.class 이 클래스를 바탕으로 하라고

 

getBean("이름", 반환타입)

"이름"은 보통 메소드 이름. 메소드 이름을 빈 이름으로 사용

@Bean(name = "이름") 이렇게 변경도 가능하긴 함.. 근데 굳이..

 

참고로 .class는 인스턴스가 아니라 타입 자체를(이게 어떤 타입이다, 타입에 대한 정보인 듯?) 넘길 때 저렇게 하는 듯.

 

 

 

'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글

20강. 빈 확인  (0) 2023.07.17
19강. 스프링 컨테이너 생성  (0) 2023.07.16
17강. IoC, DI, 컨테이너  (0) 2023.07.16
16강. Rate할인으로 변경  (0) 2023.07.16
15강. AppConfig 리팩토링  (0) 2023.07.16