백엔드개발자/SPRING, JPA 등...

스프링으로 전환(AppConfig, OrderApp, MemberApp...)과 스프링컨테이너

보혀니 2022. 1. 11. 23:01

AppConfig와 여러 App들을 변경 시켜주었다.

package com.hello;

import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;

import com.hello.discount.DiscountPolicy;
import com.hello.discount.RateDiscountPolicy;
import com.hello.member.MemberRepository;
import com.hello.member.MemberService;
import com.hello.member.MemberServiceImp;
import com.hello.member.MemoryMemberRepository;
import com.hello.order.OrderService;
import com.hello.order.OrderServiceImpl;

@Configuration
public class AppConfig {

	@Bean
	public MemberService memberService() {
		return new MemberServiceImp(memberRepository());
	}

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

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

	@Bean
	public DiscountPolicy discounPolicy() {
		return new RateDiscountPolicy();
	}
}

 

 

MemberApp

 

 

OrderApp

 

스프링 컨테이너

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

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

- 스프링 컨테이너는 '@Configuration' 이 붙은 'AppConfig' 를 설정 정보로 사용한다. 여기서 '@Bean' 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.

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

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

 

 

 

그렇다면.... 코드적으로는 더 복잡해진 것 같은데...............

스프링 컨테이너를 사용하면 어떤 장 점이 있 을 까???????????????

????????????????????????????????????????????????????????????