我有一个春豆。
@Component
public class Omg {
public void omg() throws IOException {
HttpServletRequest request = null;
InputStream is = request.getInputStream();
is.read();
}
}
我没有在servlet容器中使用它。 这仅仅是为了举例。
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
此行抛出异常java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream.
Servlet api在运行时的类路径中不。好的,我知道当omg方法运行时应该抛出NoClassDefFoundError
。问题是:当spring尝试实例化bean以及为什么ServletInputStream
而不是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)
更新: 但是这很好用
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 :(得分:0)
公共类NoClassDefFoundError扩展了LinkageError
如果Java虚拟机或ClassLoader实例尝试,则抛出该异常 加载类的定义(作为普通方法调用的一部分或 作为使用新表达式创建新实例的一部分)和否 可以找到班级的定义。
public class A {}
public class B {
public void m(A a) {
}
public static void main(String[] args) {
B b = new B();
}
}
javac A.java // OK
javac B.java // OK
// remove A.class
java B
Exception in thread "main" java.lang.NoClassDefFoundError: A
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)