봄이 자동으로 배선할 수 없음 맵빈
봄의 지도를 다음과 같이 정의했습니다.
<util:map id="AdditionalParams" scope="prototype" map-class="java.util.HashMap"
key-type="java.lang.String" value-type="java.lang.String">
<entry key="Start" value="12345" />
<entry key="Finish" value="12365" />
</util:map>
그런 다음 이 콩을 다음과 같이 정의된 부동산에 자동으로 연결합니다.
private @Autowired @Qualifier(value = "AdditionalParams") Map<String, String> additionalParams;
이 작업을 수행할 때 다음과 같은 예외가 표시됩니다.
원인: org.spring framework.콩 공장빈 크리에이션예외:이름이 'DutyCreator'인 빈을 만드는 중 오류가 발생했습니다.자동 와이어 종속성을 주입하지 못했습니다. 중첩 예외는 org.springframework입니다.콩 공장빈 크리에이션예외:private java.util 필드를 자동으로 연결할 수 없습니다.Map DutyCreator.additionalParams; 중첩 예외는 org.springframework입니다.콩 공장해당 빈 정의 없음예외:[java.lang] 유형의 빈이 일치하지 않습니다.[값 유형이 java.lang인 map] 종속성에 대한 String]을(를) 찾았습니다.문자열]:이 종속성에 대한 자동 배선 후보로 적합한 최소 1개의 콩이 예상됩니다.종속성 주석: {@org.springframework.콩.공장. annot.자동 연결(required=true), @org.springframework.콩.공장. annot.한정자(값= additionalParams)}
원인: org.spring framework.콩 공장해당 빈 정의 없음예외:[java.lang] 유형의 빈이 일치하지 않습니다.[값 유형이 java.lang인 map] 종속성에 대한 String]을(를) 찾았습니다.문자열]:이 종속성에 대한 자동 배선 후보로 적합한 최소 1개의 콩이 예상됩니다.종속성 주석: {@org.springframework.콩.공장. annot.자동 연결(required=true), @org.springframework.콩.공장. annot.한정자(값= additionalParams)}
무슨 생각 있어요?
건배.
스프링 4.3부터,@Autowired
목록과 지도를 주입할 수 있으며 문제의 주어진 코드는 다음과 같이 작동합니다.
즉, 4.3 현재 수집/맵 및 배열 유형은 Spring's를 통해 일치시킬 수 있습니다.
@Autowired
요소 유형 정보가 보존되는 한 유형 일치 알고리즘도 마찬가지입니다.@Bean
반환 형식 서명 또는 수집 상속 계층 구조입니다.
하지만 Spring 버전이 낮으면 그런 컬렉션을 자동으로 연결할 수 없습니다.그러나 다음을 수행할 수 있습니다.
@Resource(name="AdditionalParams")
private Map<String, String> additionalParams;
또는 다음과 같은 경우:
@Value("#{AdditionalParams}")
private Map<String, String> additionalParams;
스프링 설명서, 팁 섹션을 확인합니다.
컬렉션 또는 맵 유형으로 정의된 원두는 @Autowired를 통해 주입할 수 없습니다. 왜냐하면 유형 일치가 적절하게 적용되지 않기 때문입니다.이러한 콩에 @Resource 사용
@Qualifier(값 = "AdditionalParams")가 작동하지 않는 것 같습니다.
다음 주석을 사용하여 지도를 사용해 보십시오.
@Resource
private Properties AdditionalParams;
applicationContext.xml 파일을 그대로 유지합니다.
@Autowired ApplicationContext ctx;
private <T> T getBean(String qualifier, Class<T> returnType){
//use this for loop to print all bean from ctx. so you wont miss the typo.
/*for(String s:ctx.getBeanDefinitionNames())
log.info(s);*/
return ctx.getBean(qualifier, returnType);
}
// 당신의 부름 안에서
if(providerList == null){
providerList = ctx.getBean("providerList", Map.class);
}
이 솔루션은 저에게 유용합니다.
언급URL : https://stackoverflow.com/questions/13913752/spring-cant-autowire-map-bean
'programing' 카테고리의 다른 글
이상한 MySQL "읽기 전용" 오류 (0) | 2023.09.19 |
---|---|
연결이 끊긴 후 SQL 트랜잭션이 롤백되지 않는 이유 - C#? (0) | 2023.09.19 |
MySQL 스크립트 내에 스크립트 포함 (0) | 2023.09.19 |
데이터 집약적 PL/SQL 응용 프로그램을 테스트하는 방법(단위) (0) | 2023.09.19 |
MVC 모델 데이터 가져오기 및 각도 전달JS컨트롤러 (0) | 2023.09.19 |