더북(TheBook)

4.2.2 시동 시 싱글톤을 사용

자바 EE 싱글톤은 원래 뒤늦게 초기화합니다. 즉, 싱글톤이 진짜 필요해서 처음 접근할 때 비로소 인스턴스가 만들어지는데 대부분은 이런 방식이 잘 들어맞습니다. 하지만 인스턴스 생성 시 큰 비용이 들거나 애플리케이션 시작과 동시에 빈이 필요한 상황이면 지체 없이 싱글톤에 접근할 수 있어야 할 테니 시동 시점에 인스턴스를 만들어야 할 것입니다. @Startup은 인스턴스를 시동 시점에 강제로 만드는 애너테이션입니다(코드 4-8).

코드 4-8 시동 시 싱글톤을 생성

package com.devchronicles.singleton;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import java.util.logging.Logger;

@Startup
@Singleton
public class CacheSingletonBean {

private Map<Integer, String> myCache;

@PostConstruct
    public void start(){
    Logger.getLogger("MyGlobalLogger").info("시작합니다!");
    myCache = new HashMap<Integer, String>();
}

public void addUser(Integer id, String name){
    myCache.put(id, name);
}

public String getName(Integer id){
    return myCache.get(id);
}
}

이 싱글톤은 서버가 시동될 때 만들어지므로 서버를 재실행하면 @PostConstruct 메서드가 호출되고 콘솔창에는 Started! 메시지가 나타납니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.