[SPRING] Spring Java 설정은 주입 된 맵을 래핑합니다.
SPRINGSpring 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.@ 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) { //.. }
from https://stackoverflow.com/questions/41056765/spring-java-config-wraps-injected-map by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Vault 백엔드가있는 Spring Cloud Vault와 Spring Cloud Config의 차이점 (0) | 2019.04.29 |
---|---|
[SPRING] 봄 부팅 + 최대 절전 모드 (0) | 2019.04.29 |
[SPRING] Spring MVC Controller에서 생성 된 쿠키에 http-only 설정 (0) | 2019.04.29 |
[SPRING] 스키마 검증 : 테이블 누락 [hibernate_sequences] (0) | 2019.04.29 |
[SPRING] ContextLoader를 디버깅하는 방법 - 컨텍스트 초기화에 실패하고 BeanCreationException이 발생했습니다. (0) | 2019.04.29 |