2016-09-13 3 views
0

У меня есть приложение Spring MVC, созданное с использованием Spring 4.1.0.RELEASE. У меня есть класс A, который был отмечен с помощью @Configuration, чтобы пометить его как класс конфигурации.Бин с пометкой @Configuration не удается создать и не удается запустить приложение

XML-конфигурации в контексте приложения, как показано ниже

<bean id="a" class="A"></bean> 

Приложение неисправного при запуске со следующей ошибкой. Я использую eclipse с плагином Jetty 8.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'a' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: A(class name)(Lorg/springframework/beans/factory/BeanFactory;)V 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:548) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:229) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:370) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1113) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1008) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:861) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:791) 
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:541) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:406) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:381) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:485) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:478) 
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1052) 
at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:356) 
at org.springframework.amqp.rabbit.core.RabbitAdmin$11.onCreate(RabbitAdmin.java:323) 
at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:32) 
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:373) 
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80) 
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130) 
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67) 
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:365) 
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1009) 
at java.lang.Thread.run(Thread.java:745) 

Странная часть заключается в том, что приложение работает нормально во всех моих командных командах, но не на моем.

Любая помощь будет высоко оценена.

+0

может быть ваша версия Java отличается от других? – duardito

+0

У нас есть специфичная для проекта настройка java, и она использует java 1.6, то же самое на машине каждого. –

ответ

0

java.lang.NoSuchMethodError возникает, если есть проблема с загруженной баночкой. Я думаю, что на вашей машине, на которой вы пытаетесь запустить этот код, CLASSPATH установлен на какой-то путь, который загружает более старую версию jar.

  1. Возможно, что более низкая версия весенних банок может существовать в вашей общей папке или в пути к классу.

  2. Если это проект maven, укажите зависимость mvn: дерево и проверьте, что любая другая зависимость загружает нижнюю версию пружины.

  3. Вы можете увидеть дорожки всех банок, загруженных в ваше приложение.

государственной статической силы основных (String [] арг) {

URLClassLoader ClassLoader = (URLClassLoader) CurrentClass.class.getClassLoader(); System.out.println (Arrays.toString (классLoader.getURLs()));

}

+0

1. Я проверил путь к классу, но я не вижу более ранней версии весны 2. Это проект maven, и я запускал команда дерева зависимостей, но не могла найти никаких проблем. 3. Я проверил пути банок, загружаемых в приложение, и он загружается из моего локального репозитория maven. –

+0

Я сомневаюсь, что в классе родительских классов есть еще один класс A который не имеет конструктора по умолчанию. Если вы можете отлаживать свой код при запуске приложения, сохраните точку отладки в AbstractAutowireCapableBeanFactory.doCreateBean() api и в watch, проверьте загрузчик классов класса A с this.getClass(). GetClassLoader(). LoadClass («A»). getClass(). getClassLoader(). loadClass ("A"). getClassLoader(). Пожалуйста, верните результат. –

+0

С включенным отладчиком я попытался взглянуть на переменные, когда элемент управления достигнут внутри doCreateBean, но не смог найти, откуда получить эту информацию, и я не могу изменить источник этого класса, чтобы добавить строку кода, которую вы дали. Я включил подробный режим в аргументах vm, который дает загрузку класса, но не смог найти ничего подозрительного, поскольку все классы загружаются из моего локального .m2. Также я сделал замечание, что весенний контейнер сначала создает бобы при загрузке контекста, а затем начинает уничтожать их на полпути, а затем бонус, о котором идет речь, воссоздается и кэшируется с нетерпением любой идеи, почему? –