이어서, 스프링으로
자바를 이용한 예제에서 이제는 스프링을 적용시켜보자
Appconfig에는 @Configuration을 붙여주면 되고, 나머지 객체를 생성하고 의존관계를 주입해주는 메서드에는 @Bean을 붙여준다. 이제 클라이언트는 AppConfig를 객체를 생성해서 메서드로 서비스 객체를 가지고 오지 않는다. 하지만 AppConfig의 스프링 컨테이너를 생성하고 스프링이 관리해주는 각 서비스객체와 매칭되는 스프링 빈들을 통해서 기존과 같은 기능을 구현할 수 있다!
코드로 보자!
OrderApp.java
public class OrderApp {
public static void main(String[] args) {
//AppConfig appConfig = new AppConfig();
//MemberService memberService = appConfig.memberService();
//OrderService orderService = appConfig.orderService();
ApplicationContext applicationContext = new
AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService =
applicationContext.getBean(“memberService”, MemberService.class);
OrderService orderService = applicationContext.getBean(“orderService”,
OrderService.class);
...
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();
}
}
스프링 컨테이너와 스프링 빈
1. 스프링 컨테이너
스프링 컨테이너는 앞선 포스팅의 컨테이너 개념에 스프링을 합친 것 뿐이다. 스프링 프레임워크가 컨테이너개념을 활용하기 쉽게 제공한다.
ApplicationContext가 스프링 컨테이너다!ApplicationContext
는 인터페이스이고, new AnnotationConfigApplicationContext(AppConfig.class)
는 구현체이다.
2. 스프링 빈
@Bean
애너테이션이 붙은 메서드를 호풀해서 반환된 객체를 스프링 컨테이너에 등록하는데, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
3. 스프링 컨테이너의 생성, 스프링 빈의 생성과 의존관계 주입
1) 스프링 컨테이너 생성

2) 스프링 빈 등록

3) 스프링 빈 의존관계 설정 - 준비

4) 스프링 빈 의존관계 설정 - 완료

스프링 빈의 생성과 의존관계 주입은 단계가 구분되어 있다.
그러나 위와 같이 수동 빈 등록(컴포넌트 스캔 말고, @Bean 자바코드를 이용해 직접 빈을 등록하는 것)에 해당하는 경우는 빈을 등록하면 생성자를 호출하면서 의존관계도 한번에 처리된다.
이어서, 스프링으로
자바를 이용한 예제에서 이제는 스프링을 적용시켜보자
Appconfig에는 @Configuration을 붙여주면 되고, 나머지 객체를 생성하고 의존관계를 주입해주는 메서드에는 @Bean을 붙여준다. 이제 클라이언트는 AppConfig를 객체를 생성해서 메서드로 서비스 객체를 가지고 오지 않는다. 하지만 AppConfig의 스프링 컨테이너를 생성하고 스프링이 관리해주는 각 서비스객체와 매칭되는 스프링 빈들을 통해서 기존과 같은 기능을 구현할 수 있다!
코드로 보자!
OrderApp.java
public class OrderApp {
public static void main(String[] args) {
//AppConfig appConfig = new AppConfig();
//MemberService memberService = appConfig.memberService();
//OrderService orderService = appConfig.orderService();
ApplicationContext applicationContext = new
AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService =
applicationContext.getBean(“memberService”, MemberService.class);
OrderService orderService = applicationContext.getBean(“orderService”,
OrderService.class);
...
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();
}
}
스프링 컨테이너와 스프링 빈
1. 스프링 컨테이너
스프링 컨테이너는 앞선 포스팅의 컨테이너 개념에 스프링을 합친 것 뿐이다. 스프링 프레임워크가 컨테이너개념을 활용하기 쉽게 제공한다.
ApplicationContext가 스프링 컨테이너다!ApplicationContext
는 인터페이스이고, new AnnotationConfigApplicationContext(AppConfig.class)
는 구현체이다.
2. 스프링 빈
@Bean
애너테이션이 붙은 메서드를 호풀해서 반환된 객체를 스프링 컨테이너에 등록하는데, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
3. 스프링 컨테이너의 생성, 스프링 빈의 생성과 의존관계 주입
1) 스프링 컨테이너 생성

2) 스프링 빈 등록

3) 스프링 빈 의존관계 설정 - 준비

4) 스프링 빈 의존관계 설정 - 완료

스프링 빈의 생성과 의존관계 주입은 단계가 구분되어 있다.
그러나 위와 같이 수동 빈 등록(컴포넌트 스캔 말고, @Bean 자바코드를 이용해 직접 빈을 등록하는 것)에 해당하는 경우는 빈을 등록하면 생성자를 호출하면서 의존관계도 한번에 처리된다.