스프링으로 변환

jungnoeun·2022년 8월 17일
0

spring

목록 보기
1/24

ac.getBean("");은 약간 request.getParameter와 같은 구조라고 이해해도 될까..?

이때까지 자바만을 이용해서 구현 객체는 자신의 로직만을 실행하고 프로그램의 제어 흐름은 AppConfig가 하도록 프로그램을 작성하였다. 그리고 이렇게 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(Inversion of Control) 이라 한다.

이렇게 자바로 구성한 AppConfig를 스프링으로 변환하면 어떻게 될까?

AppConfig.java - 자바

public class AppConfig {
 public MemberService memberService() {
 	return new MemberServiceImpl(memberRepository());
 }
 public OrderService orderService() {
 	return new OrderServiceImpl(memberRepository(), discountPolicy());
 }
 public MemberRepository memberRepository() {
 	return new MemoryMemberRepository();
 }
 public DiscountPolicy discountPolicy() {
// return new FixDiscountPolicy();
 	return new RateDiscountPolicy();
 }
}

AppConfig.java를 사용한 예시

@BeforeEach
 public void beforeEach() {
 	AppConfig appConfig = new AppConfig();
 	memberService = appConfig.memberService();
 	orderService = appConfig.orderService();
 }






스프링으로 변환

  • @Configuration : 해당 클래스가 설정정보임을 스프링 컨테이너에게 알려준다.

  • @Bean : @Bean이 붙은 메서드들의 호출 후 반환된 객체를 스프링 컨테이너에 등록한다. 등록된 객체를 스프링 빈이라고 한다.
    @Bean이 붙은 메서드의 이름으로 getBean(메서드이름) 와 같이 해당 메서드를 호출할 수 있다.

  • 앞으로는 AppConfig객체를 생성하고 그 안의 메서드를 호출하는 것이 아니라 스프링 컨테이너를 호출하고 그 안에 등록된 스프링 빈들을 사용할 수 있다.
    사용하는 방법은 예시(2)와 같이
    applicationContext.getBean((스프링빈이름), (스프링빈타입)); 로 호출할 수 있다.

AppConfig.java - 스프링

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

AppConfig.java를 이용한 예시(2)

public class MemberApp {
 public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
 	ApplicationContext applicationContext = new
	AnnotationConfigApplicationContext(AppConfig.class);
 	MemberService memberService =
    applicationContext.getBean("memberService", MemberService.class);
    // applicationContext.getBean("memberService", MemberService.class);의 값은 MemberServiceImpl이다.
 }
}
profile
개발자

0개의 댓글