Отладка «Инъекция автоматических зависимостей не удалась» Ошибка в Spring + Hibernate - PullRequest
0 голосов
/ 12 февраля 2011

Я только начал работать со Spring Framework и пытался разработать и запустить простое приложение, используя Spring + Hibernate + Maven для управления зависимостями.

У меня есть ContactController, в котором свойство типа ContactService имеет значение Autowired.Но когда я упаковал его в war и развернул на tomcat, он генерирует исключение org.springframework.beans.factory.BeanCreationException со следующими сообщениями:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name  
'sessionFactory' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: 
Invocation of init method failed; nested exception is org.hibernate.MappingException: 
An AnnotationConfiguration instance is required to use <mapping 
class="org.kodeplay.contact.form.Contact"/>

Поэтому я прокомментировал это свойство из класса ContactController вместе со всеми егоссылки и повторно его развернули.Но все равно это показывает ту же ошибку.

Это единственный контроллер во всем приложении, и объект, реализующий интерфейс ContactService, больше нигде не используется.

Что здесь происходит?Я что-то пропустил ?

Редактировать: Добавление кода для spring-servlet.xml

<?xml  version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <context:annotation-config/>

    <context:component-scan base-package="org.kodeplay.contact" /> 

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- Internationalization -->
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

    <!-- To load database connection details from jdbc.properties file -->
    <bean id="propertyConfigurer" 
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
        p:location="/WEB-INF/jdbc.properties" />

    <!-- To establish a connection to the database -->
    <bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
        p:driverClassName="${jdbc.driverClassName}"
        p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
        p:password="${jdbc.password}" />

    <!-- Hibernate configuration -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="annotatedClasses">
        <list>
            <value>org.kodeplay.contact.form.Contact</value>
        </list>
        </property>        
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>        
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven/>

    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>

Код для hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <mapping class="org.kodeplay.contact.form.Contact" />
    </session-factory>

</hibernate-configuration>

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 февраля 2011

Я подозреваю, что это будет конфликт между AnnotationSessionFactoryBean и hibernate.cfg.xml. Если вы используете первое, вам не нужно второе. Если вы используете оба, вам придется дублировать некоторые настройки, и файл cfg может затмевать конфигурацию Spring.

Все, что у вас есть в hibernate.cfg.xml, вы сможете перейти к определению bean-компонента для AnnotationSessionFactoryBean, и это должно устранить вашу ошибку.

1 голос
/ 12 февраля 2011

Я полагаю, вы пытаетесь настроить Hibernate с org.springframework.orm.hibernate3.LocalSessionFactoryBean. Тем не менее, вы используете аннотации в отображении Hibernate, поэтому вам нужно использовать org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...