2011-09-14 2 views
3
  • 안녕하세요! 오늘은 최적화의 종류에 대해 생각하고 몇 가지 질문이 ...

상황 : 내 웹 응용 프로그램에서 Guice 2.Guice로 레지스트리 최적화


사용하여 자바로 개발하고 있어요 , 나는 변환기를 특정 유형으로 즉석에서 변환 레지스트리가 있습니다. ServletModule : configureServlets

public class ConverterRegistryImpl implements ConverterRegistry 
{ 

    private Map<Key,Converter<?,?>> converterRegistry = new HashMap<Key, Converter<?,?>>(); 

    @Override 
    public <F, T> void register(Class<F> fromType, Class<T> toType, Converter<F, T> converter) 
    { 
     converterRegistry.put(new Key(fromType,toType), converter); 
    } 

} 

마지막으로 내 레지스트리 (클래스 내 계산기를 등록 :

public class StringToBoolean implements Converter<String, Boolean> 
{ 

    @Override 
    public Boolean convert(String from) 
    { 
     return Boolean.valueOf(from); 
    } 

} 

내 레지스트리는지도 다름 아닌 다음과 같이 A 컨버터 설명한다())
이 단계는 최적화 될 수 있다고 생각합니다.

ConverterRegistryImpl registry = new ConverterRegistryImpl(); 
registry.register(String.class, Integer.class, new StringToInteger()); 
registry.register(String.class, Boolean.class, new StringToBoolean()); 
... 
//Then I bind the registry to this current instance... 
bind(ConverterRegistry.class).toInstance(registry) 

(3210)는 이러한 방법으로 나는이 같은 모든 곳에서 사용할 수 있습니다 :

@Inject 
ConverterRegistry converter; 

  • 가 잘 나는이 사용 Guice을 구현하는 가장 좋은 방법을 찾고 있어요.
  • 더 일반적으로 Guice (또는없이)와 같은 종류의 레지스트리를 구축 했습니까?

미리 감사드립니다.

+0

흠, Guice의 어떤 버전 1.2가 없다 ... –

+0

네, 만들 실수. 나는 버전 2를 사용하고 있습니다. – Jarod

답변

2

정확하게 "최적화"란 것을 정확히 알지 못합니다. 접근법의 단점 중 하나는 변환기와 레지스트리를 손으로 작성하므로 종속성 주입의 장점을 사용하지 않는다는 것입니다. 또한 다른 모듈의 변환기를 누적 할 수 없습니다. http://code.google.com/p/google-guice/wiki/Multibindings

Injector injector = Guice.createInjector(new Module() { 
     @Override 
     public void configure(Binder binder) { 
      @SuppressWarnings("rawtypes") 
      Multibinder<Converter> converterBinder = Multibinder.newSetBinder(binder, Converter.class); 
      converterBinder.addBinding().to(StringBooleanConverter.class); 
      converterBinder.addBinding().to(BooleanStringConverter.class); 
     } 
    }); 
    ConverterRegistryImpl registry = injector.getInstance(ConverterRegistryImpl.class); 

전체 코드에서 사용 가능한입니다 :

이 guice하는 multibindings 확장자로 고정 할 수 있습니다 https://gist.github.com/1217563

+0

Ok. 그러면 특정 변환기를 검색 할 수 있습니다. 두 변환기 유형을 변환 할 수있는 경우 각 변환기를 점검해야합니다 (유형 및 유형)? – Jarod

+0

No. setter에서 메서드를 사용했습니다. void register (형식 fromType, 클래스 형식, 변환기 변환기) –

+0

오케이! 지도를 유지해야합니다. 그렇지 않으면 각 변환기를 확인하는 것이 더 낫습니까? ! 좋은 해결책입니다. 프로젝트를 업데이트 할 것입니다. 고맙습니다 ! – Jarod

관련 문제