ArrayOutOfBoundsException:asm.ClassReader.readClass(Unknown Source)

我有一个具有以下依赖项的层次结构:

Base(Timer timer) Timer(PublisherService service, BaseDao userDao, DataProcessor processor) 

DataProcessor还有其他依赖DataProcessor但我不会那么远,因为看起来我的错误很早就发生了。 与该依赖图对应,我有以下Spring配置:

              

在我的应用程序的顶层,我将运行:

 ApplicationContext context = new ClassPathXmlApplicationContext("spring-configuration.xml"); Base consumerBase = context.getBean("base", Base.class); 

当我按照调试时发现Timer已成功初始化。 。 。有些。 在Timer完全解析并注入Base我回过头来看:

 java.lang.ArrayIndexOutOfBoundsException: 3145 at org.springframework.asm.ClassReader.readClass(Unknown Source) at org.springframework.asm.ClassReader.accept(Unknown Source) at org.springframework.asm.ClassReader.accept(Unknown Source) at org.springframework.core.LocalVariableTableParameterNameDiscoverer.visitConstructor(LocalVariableTableParameterNameDiscoverer.java:123) at org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:89) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:600) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:140) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.apps.Main.contextInitialized(Main.java:39) 

我正在将它追溯到Main ,这是我的堆栈跟踪中唯一的类。

删除Java和XML中的所有三个构造函数参数解决了这个问题,但是引入3个构造函数参数中的任何一个都会将其重新引出。 例如,对于DataProcessor ,依赖图确实更深一些,但即使我只使用BaseDao作为构造函数args,它本身也没有依赖关系,我会得到这个错误。

知道这里发生了什么吗? 我已经尝试了构造函数args的各种排列,创建了新的接口实现,以防我现有的东西导致问题冒出来,几乎所有的一切都不好意思只是从头开始重写这个更仔细。

编辑:

 public class Base { private TimerTask consumerTimerTask; private static Logger logger = LoggerFactory.getLogger(Base.class); public Base(TimerTask timer) { this.consumerTimerTask = timer; } /** * Initialize the timer. * @throws Exception */ public void initialize() throws Exception { final int updateFrequency = 10000; // Once all fields have been generated and prefs read, initialize the update process every number of seconds. final Timer updateTimer = new Timer(); updateTimer.scheduleAtFixedRate(this.consumerTimerTask, 0, updateFrequency); logger.info("Base initialized successfully!"); } } 

由于代码是inheritance的,我忽略了以下依赖的版本:

  org.springframework spring-context ${spring.version}  

设置4.2.4.RELEASE修复了问题。