jdk 1.8 와 spring 2.5.5 호환성 문제

13076 단어 자바
먼저 이상 보기:
nested exception is java.lang.ArrayIndexOutOfBoundsException: 9578
 at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
 at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:182)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:147)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
 at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
 at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
 at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
 at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
 at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
 at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
 at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)

프로젝트 에 jar 패 키 지 를 스 캔 하 는 것 이 설정 되 어 있 기 때문에 종류 가 많 고 위치 추적 이 쉽 지 않 습 니 다. 제 가 현지에서 실 현 된 테스트 코드 는 다음 과 같 습 니 다.
public class MyMetadataReader implements MetadataReader {

    private final ClassReader classReader;

    private final ClassLoader classLoader;


    public MyMetadataReader(ClassReader classReader, ClassLoader classLoader) {
        this.classReader = classReader;
        this.classLoader = classLoader;
    }


    public ClassMetadata getClassMetadata() {

        ClassMetadataReadingVisitor visitor = new ClassMetadataReadingVisitor();
        this.classReader.accept(visitor, true);
        return visitor;
    }

    public AnnotationMetadata getAnnotationMetadata() {
        AnnotationMetadataReadingVisitor visitor = new AnnotationMetadataReadingVisitor(this.classLoader);
        this.classReader.accept(visitor, true);
        return visitor;
    }

}

테스트:
ClassReader reader = new ClassReader(in);
                       MetadataReader metadataReader = new MyMetadataReader( reader, classLoader);
                       metadataReader.getAnnotationMetadata();

최종 적 으로 읽 기 오류 가 있 는 class 파일 을 가 져 왔 습 니 다. 자바 8 의 lambda 표현 식 기능 이 사용 되 어 있 습 니 다.
firstElements.forEach(e -> root.add(e.addAttribute("class","1").detach()));
            secondElements.forEach(e -> root.add(e.addAttribute("class","2").detach()));
            thirdElements.forEach(e -> root.add(e.addAttribute("class","3").detach()));

ClassReader 라 는 종 류 는 spring 4. X 에 다시 썼 습 니 다. spring 이 4. x 로 업그레이드 되 지 않 으 면 자바 8 의 새로운 기능 을 사용 할 수 없 는 지 묻 지 않 을 수 없습니다.그렇다면 정말 큰 구덩이 야!
테스트 를 통 해 Spring 2.5.5 에서 주해 스 캔 을 사용 할 때 클래스 Component ScanBean DefinitionParser 에 사용 되 는 방법 을 사용 하여 ClassReader 에 있 는 방법 을 호출 하면 Spring 이 정상적으로 초기 화 되 지 않 습 니 다.

좋은 웹페이지 즐겨찾기