2013-03-29 8 views
5

Jestem początkującą wiosną MVC. Występuje problem "Nie znaleziono pasującej fasoli typu [org.hibernate.SessionFactory] dla zależności: oczekiwano co najmniej 1 komponentu bean, który kwalifikuje się jako kandydata na autora dla tej zależności." "i spędzają dużo czasu.Brak pasującej fasoli typu [org.hibernate.SessionFactory] znalezionej dla zależności

Użyłem zarządzania budową maven. Mój projekt składa się z dwóch modułów: springcore (jar) i springmvc (aplikacja internetowa). A springmvc (aplikacja internetowa) jest rdzeniem sprężyny zależności. W module wiosny rdzenia, i określono cały pakiet takich jak dom, dao, usługi i ich realizacji, a ja również zdefiniowane applicationContext.xml w src/main/zasobów następuje:

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(); 
    } 
} 

W springmvc (web app), i zdefiniowany web.xml i dyspozytor-servlet.xml

dyspozytor-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> 

Oto mój problem, gdy próbuję uruchomić go w serwerze 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) 

Czy ktoś może mi powiedzieć, co jest re ason SessionFactory nie może zostać utworzony przez kontekst aplikacji sieci Web ani żaden problem podczas konfigurowania SessionFactory.

Wszelkie wsparcie zostanie docenione.

+0

wersja hibernacji używane –

+0

można potwierdzić, czy plik jest kopiowany do applicationContext.xml ścieżki klasy i jest ładowany –

+0

użyłem wersji Spring 3.0.5 zwolnić i hibernate- Zależność core-3.3.2.GA dla mojego projektu. Jakiś problem z zależnościami mojego projektu? –

Odpowiedz

0

Spróbuj bezpośrednio zaimportować kontekst aplikacji do pliku dispatcher-servlet.xml (który jest prawidłowo załadowany) jak poniżej.

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

0

Twój SessionFactory nie wychodzi poprawnie zainicjowany.

Przeczytaj swój błąd, gdzie i co jest zgłaszane. który jest

Nie udało autowire pola: prywatny org.hibernate.SessionFactory

Trzeba mieć SessionFactory poprawnie zainicjowany

teraz jak przetestować to dość proste. Najpierw usuń kod sesji dodany w kodzie. Sprawdź, czy źródło danych jest poprawnie inicjowane.

Dodaj źródło danych jako autowire. @Autowired DataSource dataSource;

w swoich metodach można łatwo wykonać polecenie dataSource.getConnection.Jeśli możesz testować za pomocą zwykłego jdbc, jesteś o krok bliżej.

Jeśli źródło danych zostanie poprawnie skonfigurowane, możesz przetestować swoją instalację sesyjną jako drugi krok.

Nie sądzę, że skanowanie wsteczne daje ci jakiś problem, ponieważ mówi, że nie udało się automatycznie. Więc DataSource i SessionFactory ziarna nie są prawidłowo ustawione w xml

Powiązane problemy