programing

봄이 자동으로 배선할 수 없음 맵빈

instargram 2023. 9. 19. 20:46
반응형

봄이 자동으로 배선할 수 없음 맵빈

봄의 지도를 다음과 같이 정의했습니다.

<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

반응형