最近找了本<Spring MVC学习指南>开始学spring mvc,在网上下载了它的源码(点击打开链接),将app01a导入eclipse调试时报如下异常:
Exception in thread "main" java.lang.IllegalArgumentException
at org.springframework.asm.ClassReader.<init>(Unknown Source)
at org.springframework.asm.ClassReader.<init>(Unknown Source)
at org.springframework.asm.ClassReader.<init>(Unknown Source)
at org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass(LocalVariableTableParameterNameDiscoverer.java:110)
at org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:85)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1051)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at app01a.Main.main(Main.java:15)
app01a的部分源码如下,用来测试spring的依赖注入模式,异常发生在红字部分:
ApplicationContext context =
<span style="color:#ff0000;">new ClassPathXmlApplicationContext(new String[] {"spring-config.xml"});</span>
Product product1 = context.getBean("product", Product.class);
product1.setName("Excellent snake oil");
System.out.println("product1: " + product1.getName());
Product product2 = context.getBean("product", Product.class);
System.out.println("product2: " + product2.getName());
Product featuredProduct = context.getBean("featuredProduct", Product.class);
System.out.println(featuredProduct.getName() + ", " + featuredProduct.getDescription()
+ ", " + featuredProduct.getPrice());
Test tt = context.getBean("test", Test.class);
tt.setName("John");
System.out.println("Test:" + tt.getName());
//Calendar calendar = Calendar.getInstance();
Calendar calendar = context.getBean("calendar", java.util.Calendar.class);
System.out.println("calendar:" + calendar.getTime());
检查了下spring-config.xml文件,发现大部分都是自定义类,只用到了jdk中的java.util.Calendar类。将之注释掉,重新调试可以运行,因此,判断可能是
jdk与spring版本不兼容。demo中用到了spring 3.2.2的jar包,而jdk是1.8.0_102。将jdk更换为1.7后,顺利通过;或者将spring升级到4.1,也可以通过。