Hansel
싱글톤 컨테이너 본문
스프링의 기본 빈 등록 방식은 싱글톤으로 작동한다.
public class MemberApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
// MemberService memberService = new MemberServiceImpl();
ApplicationContext applicationContext
= new AnnotationConfigApplicationContext(AppConfig.class);
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("findMember = " + findMember.getName());
}
}
앞서 사용했던 member앱 에서는 AnnotationConfigApplicationContext를 사용해서 appconfig의 정보를 받아오고 그를 통해 만들어진 인스턴스를 이용해서 getBean으로 객체를 생성했다.
AnnotationConfigApplicationContext 방식이 스프링의 빈을 생성하는 방식이고 싱글톤으로 객체를 생성하는 방식이다. (appconfig는 설정 정보가 작성되어 있다.)
AnnotationConfigApplicationContext 는 @Configuration이 붙은 클래스를 참조함.
Appconfig
@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl (memberRepository(),discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy(){
return new RateDiscountPolicy();
}
}
Test
@Test
@DisplayName("스프링 컨테이너와 싱글톤")
void springContainer(){
//1. 조회 : 호출마다 조회 생성
// AppConfig appConfig = new AppConfig();
AnnotationConfigApplicationContext ac =
new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService1 =
ac.getBean("memberService",MemberService.class);
MemberService memberService2 =
ac.getBean("memberService",MemberService.class);
//참조 값이 다른것 확인
System.out.println("memberService1 = " + memberService1);
System.out.println("membersv2 = " + memberService2);
}
'Spring > 기초' 카테고리의 다른 글
스프링부트 기초 / 도메인 설정 2 (0) | 2022.02.21 |
---|---|
스프링부트 기초 / Repository & Service (0) | 2022.02.21 |
스프링부트 기초 / 도메인 설정 (0) | 2022.02.21 |
스프링부트 기초 / 환경설정 (0) | 2022.02.21 |
싱글톤 패턴 (0) | 2022.02.04 |