복붙노트

[SPRING] Spring Java 설정은 주입 된 맵을 래핑합니다.

SPRING

Spring Java 설정은 주입 된 맵을 래핑합니다.

나는 최근에 Spring의 XML 설정을 Java 설정으로 바꾸고 이상한 문제에 봉착했다.

XML 구성은 다음과 같습니다.

<util:map id="myMap">
    <entry key="a" value="aValue"/>
    <entry key="b" value="bValue"/>
    <entry key="c" value="cValue"/>
</util:map>

<bean id="myBean" class="my.MyClass">
    <property name="myMap" ref="myMap"/>
</bean>

Java 구성은 다음과 같습니다.

@Bean
public Map<String, Object> myMap() {

    Map<String, Object> myMap = new HashMap<>();
    myMap.put("a", "aValue");
    myMap.put("b", "bValue");
    myMap.put("c", "cValue");

    return myMap;
}

@Bean
public MyClass myBean(@Qualifier("myMap") final Map<String, Object> myMap) {

    MyClass myBean = new MyClass();
    myBean.setMyMap(myMap);

    return myBean;
}

두 콩은 서로 다른 파일에 선언되어 있으므로 읽기 쉽도록 여기에 그룹화했습니다. 지도에는 문자열뿐만 아니라 참조도 포함됩니다.

두 번째 bean에서 myMap을 사용할 수 있기를 기대하지만 대신 Spring은 다음 맵을 삽입합니다.

{ myMap = { a=aValue, b=bValue, c=cValue } }

나는 왜 Spring이 맵을 다른 맵으로 래핑하는지 이해하지 못한다. 왜 XML이 XML 설정과 같은 방식으로 동작하지 않는지 이해할 수 없다.

어떤 아이디어?

해결법

  1. ==============================

    1.@ Autowired-ing Map은 bean 이름을 정의하기도하고, 주석마다 주석으로 된 @Resource 어노테이션을 사용할 수 없기 때문에 bean 이름을 정의하는 @Value 어노테이션을 사용하는 대안이있다 :

    @ Autowired-ing Map은 bean 이름을 정의하기도하고, 주석마다 주석으로 된 @Resource 어노테이션을 사용할 수 없기 때문에 bean 이름을 정의하는 @Value 어노테이션을 사용하는 대안이있다 :

    @Bean
    public MyClass myBean(@Value("#{myMap}") final Map<String, Object> myMap) {
    //..
    }
    
  2. from https://stackoverflow.com/questions/41056765/spring-java-config-wraps-injected-map by cc-by-sa and MIT license