SPRING
[스프링 핵심 원리] 자바에서 스프링으로 전환하기
merryna
2022. 9. 26. 10:03
반응형
package hello.core;
import hello.core.discount.DiscountPolicy;
import hello.core.discount.FixDiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberService;
import hello.core.member.MemebrServiceImpl;
import hello.core.member.MemoryMemberRepositroy;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceimpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemebrServiceImpl(memberRepository());
}
@Bean
public static MemoryMemberRepositroy memberRepository() {
return new MemoryMemberRepositroy();
}
@Bean
public OrderService orderService() {
return new OrderServiceimpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy(){
//return new RateDiscountPolicy();
return new FixDiscountPolicy();
}
}
1. Class 상단에 @Configuration 넣기
AppConfig에 설정을 구성한다는 뜻
2. 각 메서드에 @Bean 넣기
스프링 컨테이너에 스프링 빈으로 등록됨
public class OrderApp {
public static void main(String[] args) {
//main 메서드보다 test에서 테스트 필요!
/* AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();*/
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = ac.getBean("memberService", MemberService.class);
OrderService orderService = ac.getBean("orderService", OrderService.class);
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "pizza", 5000);
System.out.println(order);
System.out.println(order.getDiscountPrice());
}
}
주석된 코드는 기존에 스프링이 아닌 자바로 AppConfig를 사용해서 직접 객체 생성하고 DI를 한 코드
🍰ApplicationContext : 스프링 컨테이너(@Bean 관리)
스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용한다. 여기서 @Bean
이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에
등록된 객체를 스프링 빈이라 한다.
스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.
- 스프링 빈의 이름
@Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용하지만 다음과 같이 임의 설정이 가능하다.
(하지만, 관례에 따르는 것을 추천함)
//AppConfig
@Bean(name = "abc")
//OrderApp
OrderService orderService = ac.getBean("abc", OrderService.class);
이 전 강의에서는 직접 Java 코드로 구성을 하였는데 이제 스프링 컨테이너가 담당하게 되었다. 언뜻보면 더 복잡해보일 수 도 있는데 스프링 컨테이너의 역할이 프로젝트에 있어서 큰 역할을 차지한다. 어떠한 부분 때문에 이러한 스프링 컨테이너를 사용하는지 궁금하다!
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 수강하며 기록한 글입니다.
반응형