2014-10-22 2 views
0

스프링 빈이 있습니다.빈을 인스턴스화 할 때 Spring에서 NoClassDefFoundError를 throw합니다.

@Component 
public class Omg { 

    public void omg() throws IOException { 
     HttpServletRequest request = null; 
     InputStream is = request.getInputStream(); 
     is.read(); 
    } 

} 

서블릿 컨테이너에서 사용하고 있지 않습니다. 이것은 단지 예제를위한 것입니다.

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 

이 줄 서블릿 API의 런타임 클래스 경로 하지 인 예외를 발생 java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream.. omg 메소드가 실행될 때 NoClassDefFoundError이 던져 져야한다는 것을 이해합니다. 질문 : 봄이 콩을 인스턴스화하려고 할 때 왜 던져 질까요? 왜 HttpServlerRequest이 아닌 일까요?

Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2532) 
    at java.lang.Class.getDeclaredConstructors(Class.java:1901) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:234) 

UPDATE : 그러나이 잘

public class A {} 

public class B { 

    public void method() { 
     A a = new A(); 
    } 

} 

public class C { 

    public static void main(String[] args) { 
     B b = new B(); 
    } 

} 

컴파일 모든 세 가지 클래스를 사용할 수 있습니다. A.class를 제거하십시오. C 클래스의 main 메소드를 실행한다. 그것은 잘 작동합니다.

+0

새 서버의 다른 인스턴스에서 실행 해 보았습니까? 또한 어떤 서버를 사용하고 있습니까? 나는 최근에 비슷한 문제가 있었는데 이클립스 서버가 바람둥이가 아니라 엉망이되었다. 이클립스에서 다른 서버에서 프로젝트를 실행하는 것 같다. – sparks

+0

@sparks 웹 서버를 사용하고 있지 않습니다. 이것은 단지 예제를위한 것입니다. – user1745356

답변

0

공용 클래스 NoClassDefFoundError를 자바 가상 머신 또는 ClassLoader 인스턴스가 클래스의 정의에 부하를 시도하는 경우에 슬로우 LinkageError가

를 확장 (일반 메소드 호출의 일부 또는 생성의 일환으로 로 새 표현을 사용하는 새 인스턴스)와 클래스 정의가 이 발견 될 수 있습니다.

+0

제발 내 질문을 더 자세히 읽어보십시오. – user1745356

+0

@ user1745356 예제를 추가했습니다 – Multisync

+0

예는 예외입니다. 왜 아직도 불분명 한가요? 내 질문을 업데이트했습니다. – user1745356

관련 문제