2013-06-26 2 views
2

Java 언어에서는 TreeMaps using our own Comparator 클래스를 만들 수 있습니다. 이제, 그지도 중 하나를 만들고 그것을 나의 콩 중 하나에 할당하려고합니다. 나는 또한지도 값을 미리 알고 있고 나는 떠나는 데 관심이있다. 그들을 주사한다. 질문은지도 유형을 생성자 param (나는 Comparator 클래스를 전달해야 함)을 사용하여 빌드하고 Spring을 사용하여 값을 주입 할 수 있습니까?Spring은 사용자 정의 Comparator를 사용하여 TreeMap을 만들고 채 웁니다.

선언의이 종류는 작동하지만, 값이 나중에 주입 할 수 없습니다 :

<bean id="antennaFilteringManagerMap" class="java.util.TreeMap"> 
    <constructor-arg ref="nameComparator" /> 
</bean> 

<bean id="nameComparator" class="com.tadic.model.detector.Antenna.NameComparator" /> 

을 다른 한편으로는, 내가, there are some ways지도의 클래스를 지정하는 봄의지도 유틸리티를 사용하는 경우,하지만 생성자의 인자가 전달 될 수 없습니다 :

<bean class="org.springframework.beans.factory.config.MapFactoryBean"> 
    <property name="targetMapClass"> 
     <value>java.util.TreeMap</value> 
    </property> 
    <property name="sourceMap"> 
     <map> 
      <entry key-ref="antenna1" value-ref="locationEventFilteringManager1" /> 
     </map> 
    </property> 
</bean> 

또는

<util:map map-class="java.util.TreeMap"> 
    <entry key-ref="antenna1" value-ref="locationEventFilteringManager1" /> 
</util:map> 
+0

"이 종류의 선언은 효과가 있지만 나중에 값을 입력 할 수 없습니까?" 어떻게 주사하려고합니까? –

+0

그걸로 나는 '' 태그를 빈에 배치 할 수 없다는 것을 의미합니다. 두 가지 모두'TreeMap'을'constructor-arg'로 구성하고'' 태그를 사용하여 참조 된 bean을 삽입하기를 원합니다. –

+0

빈 참조를 가져 와서 자바 코드를 추가 할 수 있습니다. 그렇지 않으면 xml 파일에서 수행하려는 경우 마지막 예제에서 주어진 것처럼 util 네임 스페이스 만 사용하십시오. –

답변

1

좋은 해결 방법입니다. 내 특정 사례에 대해 TreeMap에서 확장하는 하위 클래스를 정의했습니다.

<property name="_LocationEventFilteringManagerMap"> 
    <util:map 
     map-class="mypackage.MyBean.LocationEventFilteringManagerMap"> 
     <entry key-ref="antenna1" value-ref="locationEventFilteringManager1" /> 
    </util:map> 
</property> 

: 나는 단지 UTIL 맵 태그에 맵 클래스를 지정해야합니다, 그 후

public static class LocationEventFilteringManagerMap extends 
     TreeMap<Antenna, LocationEventFilteringManager> { 

    public LocationEventFilteringManagerMap() { 
     super(new Antenna.NameComparator()); 
    } 

} 

:이 클래스는 내가 생성자에서 기본적으로 사용하려는 비교기 추가 새로운 클래스가 그런 식으로 Map을 생성하도록 강요하면 Map에 대한 삽입이 필요 없으며 쉽게 채울 수 있습니다.