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! 메시지가 나타납니다.