public EJBLocalHome getLocalHome(String jndiHomeName) throws Exception { EJBLocalHome home = null; try{ if (cache.containsKey(jndiHomeName)) { home = (EJBLocalHome)cache.get(jndiHomeName); } else{ home = (EJBLocalHome)getInitialContext().lookup(jndiHomeName); cache.put(jndiHomeName, home); } } catch (NamingException ne) { thrownew Exception(ne.getMessage()); } catch (Exception e) { thrownew Exception(e.getMessage()); } return home; } };
서비스 로케이터 패턴은 위의 소스와 같이 cache에 담아두고 객체가 필요할 경우 메모리에서 바로바로 찾아서 제공하는 구조를 가진다.
cache에서 키를 찾아 존재하는 경우, 반환하고 없는 경우 cache에 담아주는 형태를 가진다.
인용https://code.i-harness.com/ko-kr/q/17c515 Dependency Injection과 Service Locator의 차이점은 무엇입니까? 두 패턴 모두 종속성 반전 원리를 구현하는 데 적합합니다. Service Locator 패턴은 공용 인터페이스를 변경하지 않고 전체 디자인을 느슨하게 만들기 때문에 기존 코드베이스에서 사용하기가 더 쉽습니다. 이와 동일한 이유로 Service Locator 패턴을 기반으로하는 코드는 Dependency Injection을 기반으로하는 동일한 코드보다 읽기 쉽지 않습니다.
Dependency Injection 패턴은 클래스 (또는 메소드)가 가질 종속성 서명 이후에 명확하게 나타냅니다. 이러한 이유로 결과 코드는보다 깨끗하고 읽기 쉽습니다.