2013-03-29 14 views
5

私はSpring MVCの初心者です。 "[org.hibernate.SessionFactory]タイプの一致するBeanが依存関係に見つかりませんでした:この依存関係のautowire候補となる少なくとも1つのBeanが必要です。"と多くの時間を費やしています。依存関係のある[org.hibernate.SessionFactory]タイプの一致するbeanが見つかりません

私はMavenビルド管理を使用しました。私のプロジェクトには、springcore(jar)とspringmvc(web app)の2つのモジュールからなるプロジェクトがあります。そしてspringmvc(web app)は依存性のスプリングコアとなっています。モジュールのスプリングコアでは、私はそのようなDOM、DAO、サービスおよびその実装として、すべてのパッケージを定義し、私はまた、次のsrc /メイン/リソースにapplicationContext.xmlを定義:

applicationContext.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:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- Activates scanning of @Autowired --> 
    <context:annotation-config /> 

    <context:component-scan base-package="com.netvn" /> 

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="classpath:jdbc" /> 

    <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}" /> 

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource" /> 
      <property name="annotatedClasses"> 
        <list> 
         <value>com.netvn.dom.Contact</value> 
        </list> 
      </property> 
      <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.max_fetch_depth">3</prop> 
      <prop key="hibernate.jdbc.fetch_size">50</prop> 
      <prop key="hibernate.jdbc.batch_size">10</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 
    <bean id="transactionManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 
</beans> 

ContactDaoImpl。でJava

@Repository 
public class ContactDaoImpl implements ContactDao { 
    private Log log = LogFactory.getLog(ContactDaoImpl.class); 

    @Autowired 
    private SessionFactory sessionFactory; 

    public List<Contact> listContact() { 
     Session session = sessionFactory.getCurrentSession(); 
     Query q = session.createQuery("select g from Contact g order by id desc"); 
     List<Contact> contactList= q.list(); 
     return contactList; 
    } 
} 

ContactServiceImpl.java

@Service 
@Transactional 
public class ContactServiceImpl implements ContactService { 

    @Autowired 
    private ContactDao contactDao; 

    @Transactional(propagation=Propagation.REQUIRED) 
    public List<Contact> listContact(){ 
     return contactDao.listContact(); 
    } 
} 

springmvc(Webアプリケーション)、私は私がしようとすると、

<?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:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <context:annotation-config /> 

    <mvc:annotation-driven /> 
    <context:component-scan base-package="com.netvn.dao" /> 
    <context:component-scan base-package="com.netvn.service" /> 
    <context:component-scan base-package="com.netvn.controller" /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

</beans> 

のweb.xmlここで

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
version="3.0"> 
    <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
       classpath*:*.xml 
      </param-value> 
    </context-param> 
    <servlet> 
      <servlet-name>dispatcher</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
      <servlet-name>dispatcher</servlet-name> 
      <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <listener> 
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
</web-app> 

は私の問題であるweb.xmlおよびディスパッチャ-servlet.xml

ディスパッチャ-servlet.xmlを定義しTomcatの6.0サーバー

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.netvn.dao.impl.ContactDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:502) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:282) 
    ... 86 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474) 

でそれを実行するためには、誰かが再は何か、教えてもらえますason SessionFactoryをWebアプリケーションコンテキストで作成することはできません。また、SessionFactoryをコンフィグレーションしたときに問題が発生することもあります。

ご協力いただければ幸いです。

+0

hibernateバージョン –

+0

applicationContext.xmlファイルがクラスパスにコピーされてロードされているかどうかを確認できますか? –

+0

私はSpringバージョン3.0.5 RELEASEとhibernate-私のプロジェクトのcore-3.3.2.GA依存関係。私のプロジェクトの依存関係に何か問題がありますか? –

答えて

0

以下のように、アプリケーションコンテキストをdispatcher-servlet.xml(正しくロードされています)に直接インポートしてみてください。

<import resource="classpath:WEB-INF/applicationContext.xml" />

0

あなたのSessionFactoryを正しく初期化取得されていません。

どこから何が投げられるのか、エラーをお読みください。プライベートorg.hibernate.SessionFactory

あなたはSessionFactoryのは、これは非常に単純ですテストする方法を正しく

を初期化しておく必要があります。

できませんでしたautowireフィールドです。まず、コードで追加されたセッションファクトリーを削除します。データソースが正しく初期化されているかどうかのテスト

データソースをautowireとして追加します。 @Autowired DataSource dataSource;

あなたのメソッドでは、簡単にdataSource.getConnectionを実行できます。プレーンjdbcでテストできる場合は、一歩近づいています。

データソースが正しく設定されている場合は、セッションファクトリーを2番目のステップとしてテストできます。

conextスキャンでは、autowiredが失敗するという問題が発生しているとは思われません。あなたのデータソースとsessionfactory beansはxmlで正しく設定されていません

関連する問題