2013-03-29 96 views
5

我是Spring MVC的初學者。我遇到了一個問題「找不到匹配依賴關係的[org.hibernate.SessionFactory]類型的bean:期望至少1個符合此依賴關係的自動裝填候選資源的bean。」並花費大量時間。找不到匹配依賴的[org.hibernate.SessionFactory]類型的bean

我用maven構建管理。我的項目有一個包含2個模塊的項目:springcore(jar)和springmvc(web app)。而springmvc(web app)一直是依賴spring的核心。在模塊彈簧芯,我所定義的所有包,如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應用程序),我定義web.xml和調度-servlet.xml中

調度-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: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> 

這裏是我的問題,當我嘗試給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

休眠版本使用 –

+0

可以確認applicationContext.xml文件是否被複制到類路徑中無法正確安裝並加載 –

+0

我用Spring版本3.0.5發佈和hibernate- core-3.3.2.GA依賴項目。我的項目的依賴項有問題嗎? –

回答

0

嘗試直接將您的應用程序上下文導入到dispatcher-servlet.xml(明確加載正確)如下。

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

0

SessionFactory的是沒有得到正確初始化。

閱讀您的錯誤在哪裏和什麼被引發。這是

未能進行自動裝配領域:私人org.hibernate.SessionFactory實例

你需要有正確的SessionFactory初始化

現在如何測試,這是非常簡單的。首先刪除代碼中添加的sessionfactory。測試數據源是否正確初始化

將數據源添加爲自動裝配。 @Autowired DataSource dataSource;

在你的方法中你可以很容易地做dataSource.getConnection。如果你能夠使用普通的jdbc進行測試,那麼你距離更近一步。

如果你的數據源配置正確,你可以測試你的sessionfactory作爲第二步。

我不認爲conext掃描給你任何問題,因爲它說自動佈線失敗。所以,你的數據源和SessionFactory的豆在XML

相關問題