2016-04-29 13 views
0

Ich konnte mein Problem mit anderen ähnlichen Posts nicht lösen. Ich versuche, Hibernate mit Spring Boot zu verwenden. Andere Projekte mit dieser Konfiguration funktionieren einwandfrei. Dieser tut es nicht. Vielleicht weiß einer von euch, wie man das repariert.NoSuchBeanDefinitionException: Keine berechtigende Bean vom Typ [org.hibernate.SessionFactory] gefunden für Abhängigkeit

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying 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.Qualifier(value=sessionFactory)} 

java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:478) 
at java.lang.Thread.run(Thread.java:722) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'priceDaoHibernateImpl' defined in file [D:\Sonstiges\Entwicklung\Projekte\gatrinWS\target\classes\de\xxx\gatrinws\persistence\PriceDaoHibernateImpl.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: No qualifying 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.Qualifier(value=sessionFactory)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying 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.Qualifier(value=sessionFactory)} 
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 
at de.xxx.gatrinws.Application.main(Application.java:10) 
... 6 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying 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.Qualifier(value=sessionFactory)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
... 25 more 

Dies ist meine Konfiguration

<context:component-scan base-package="de.xxx.gatrinws"/> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:global.properties</value> 
     </list> 
    </property> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="ignoreResourceNotFound" value="true"/> 
    <property name="placeholderPrefix" value="${"/> 
</bean> 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driverClassName}"/> 
    <property name="jdbcUrl" value="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/> 
    <property name="minPoolSize" value="${c3p0.minPoolSize}"/> 
    <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref local="dataSource"/> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">validate</prop> 
      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.use_first_level_cache">true</prop> 
      <prop key="maxwait">10000</prop> 
      <prop key="maxidle">25</prop> 
      <prop key="minidle">5</prop> 
     </props> 
    </property> 
    <property name="packagesToScan"> 
     <array> 
      <value>de.xxx.gatrinws</value> 
     </array> 
    </property> 
</bean> 

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<tx:annotation-driven transaction-manager="txManager"/> 

Und hier ist mein Dao, wo autowiring der session nicht zu funktionieren scheint: (Class-Datei befindet: de.xxx.gatrinws .Service, also Komponente Scan sollte funktionieren, sollte es nicht?)

@Repository 
@Transactional 
public class PriceDaoHibernateImpl implements PriceDao { 

private final SessionFactory sessionFactory; 

@Autowired 
public PriceDaoHibernateImpl(@Qualifier(value = "sessionFactory") SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

@Override 
public Product findProduct(String ean) { 
    return null; // to be added 
} 

}

Weiß jemand, wie man das löst? Service-Autowiring funktioniert wie ein Zauber. Es scheint, dass irgendetwas mit der Konfiguration der sessionFactory nicht stimmt. Aber: So funktioniert es bei anderen Projekten für mich.

Vielen Dank im Voraus!

(Falls Sie sich fragen: Ich X'ed das Paket Basisname)

EDIT:

Es "scheint", dass die applicationContext.xml (Frühjahr Config) auf/kopiert Ziel/während der Ausführung und einige Eigenschaften können nicht aufgelöst werden. Muss ich den Zielordner überall hinzufügen, wo die Eigenschaften korrekt aufgelöst werden können?

Die nicht kopierte Konfiguration kann alle Eigenschaften ohne Probleme auflösen.

+0

Haben Sie @Autowired beim Deklarieren von SessionFactory versucht? –

+0

Ja. schon versucht. Kein Unterschied. – Hoax

+0

Können Sie versuchen, Ihre applicationContext.xml in src/main/webapp/WEB-INF zu platzieren? Das sollte der Standardspeicherort dafür sein. –

Antwort

-3

Haben Sie versucht, mit Autowired Annotation ?? wie unten:

@Autowired 
    private SessionFactory sessionFactory; 
+0

Ja, habe schon versucht, es dem Mitglied hinzuzufügen. Beide sollten normalerweise funktionieren, aber das behebt das Problem nicht :( – Hoax

+0

Ich habe nicht viel Ahnung, aber Sie können auch versuchen mit @Autowired (erforderlich = falsch) – sudhir

+0

können Sie überprüfen, mit dem folgenden Beitrag: http: // stackoverflow. com/questions/25288716/konnte nicht-autowire-dao-no-qualifizierende-Bean-of-type-found-for-Abhängigkeit? rq = 1 – sudhir