06 싱글톤
p70(좌측이미지) - src/test/java/spring/basic/design/Singleton
public class Singleton {
private static final Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
private Singleton() {
}
}
p70(우측이미지), p71, p74 - src/test/java/spring/basic/design/SingletonTest
public class SingletonTest {
static class SingletonCautionService {
private int amount;
public void order(int amount) {
this.amount = amount;
}
public int getOrder() {
return amount;
}
}
@Configuration
static class CautionConfiguration {
@Bean
public SingletonCautionService singletonCautionService() {
return new SingletonCautionService();
}
}
@Test
@DisplayName("싱글톤 객체 테스트")
void singelton() {
Singleton instance = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
Assertions.assertThat(instance).isSameAs(instance2);
}
@Test
@DisplayName("스프링 컨테이너 싱글톤 테스트")
void containerSingleton() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = ac.getBean("userService", UserService.class);
UserService userService1 = ac.getBean("userService", UserService.class);
Assertions.assertThat(userService).isSameAs(userService1);
}
@Test
@DisplayName("싱글톤 문제점, 멤버변수 공유에 대한 테스트")
void cautionSingleton() {
ApplicationContext ac = new AnnotationConfigApplicationContext(CautionConfiguration.class);
SingletonCautionService sc = ac.getBean("singletonCautionService", SingletonCautionService.class);
SingletonCautionService sc2 = ac.getBean("singletonCautionService", SingletonCautionService.class);
sc.order(1000);
sc2.order(2000);
Assertions.assertThat(sc.getOrder()).isEqualTo(1000);
Assertions.assertThat(sc2.getOrder()).isEqualTo(2000);
}
}
Last updated