[Spring] 스프링으로 변환하기

[Spring] 스프링으로 변환하기

스프링 변환 관련 애노테이션

@Configuration: 애플리케이션의 구성정보를 담당하는 파일이라고 명시

@Bean: 명시된 멤버들이 스프링 컨테이너에 등록된다.

@Configuration public class AppConfig { @Bean private MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new FixDiscountPolicy(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } }

스프링 컨테이너

ApplicationContext를 스프링 컨테이너라고 한다.

기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만,

이제부터는 스프링 컨테이너를 통해서 사용한다.

스프링 컨테이너는 @Configuration이 붙은 AppConfg를 설정(구성)정보로 사용한다.

여기서 @Bean이라고 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.

이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.

스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다

이전에는 개발자가 필요한 객체를 AppConfig를 사용해 직접 조회했지만, 이제부터는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾아야한다. 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.

기존에는 개발자가 직접 자바코드로 모든것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.

public static void main(String[] args) { // AppConfig appConfig = new AppConfig(); // MemberService memberService = appConfig.memberService(); // AppConfig를 스프링의 Config 파일로 지정 및 생성된 객체를 관리 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // Config에서 memberService(메소드이름)을 꺼내오겠다 , 반환 타입 MemberService memberService = applicationContext.getBean("memberService", MemberService.class); Member member = new Member(1L, "memberA", Grade.VIP); memberService.join(member); Member findMember = memberService.findMember(1L); System.out.println("new Member = " + member.getName()); System.out.println("find Member = " + findMember.getName()); //실행시 아래와 같이 @Bean을 인스턴스로 생성해준다. // 02:55:00.299 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig' // 02:55:00.303 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberRepository' // 02:55:00.315 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'discountPolicy' // 02:55:00.321 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberService' // 02:55:00.322 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderService' }

from http://ju-bong.tistory.com/27 by ccl(A) rewrite - 2021-12-15 03:28:30