2016-05-18 63 views
0

org.springframework.beans.factory.BeanCurrentlyInCreationException:創建名爲'sessionFactoryMaster'的bean時出錯:FactoryBean當前正在創建中返回null getObjectorg.springframework.beans.factory.BeanCurrentlyInCreationException:使用名稱'sessionFactoryMaster'創建Bean時出錯:

<bean id="sessionFactoryMaster" 
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="true"> 
<property name="dataSource" ref="dataSourceMaster" /> 
<property name="packagesToScan"> 
    <list> 
     <value>com.XXXXX.common.hibernate.entities</value> 
    </list> 
</property> 

<property name="entityInterceptor" ref="auditInterceptor" /> 
</bean> 


<bean id="auditTrailsDaoImpl" class="com.XXXXX.domain.dao.impl.AuditTrailsDaoImpl"> 
    <property name="sessionFactory" ref="sessionFactoryMaster" /> 
</bean> 

<bean id="auditInterceptor" 
    class="com.XXXXX.interceptors.AuditInterceptor" lazy-init="true" > 
    <property name="auditTrailsDao" ref="auditTrailsDaoImpl" /> 

</bean> 

有關錯誤原因和解決方案的任何想法?

回答

0

您的配置中存在循環依賴關係。您的sessionFactoryMaster需要一個需要auditTrailsDao的auditInterceptor對象。auditTrailsDao反過來需要當前正在創建的sessionFactoryMaster bean。

考慮讓auditTrailsDao/auditInterceptor依賴於dataSource。您也可以讓你的auditTrailsDao查找SessionFactory作爲一個替代

public class AuditTrailsDao{ 

    public void saveTrail(AuditTrail auditTrail){ 
     SessionFactory sessionFactory = lookupSessionFactory(); 
     //save trail 
    } 
} 

您可以通過你的bean知道ApplicationContext中通過實施了ApplicationContextAware和使用的getBean方法來獲取參考SessionFactory的查找會話工廠。不推薦這樣做,因爲它將您的應用程序與Spring關聯起來。

但是有使用ServiceLocatorFactoryBean解耦春天的API應用程序中的機制,但仍然允許你的組件來查找依賴

http://docs.spring.io/autorepo/docs/spring/4.0.3.RELEASE/javadoc-api/org/springframework/beans/factory/config/ServiceLocatorFactoryBean.html

相關問題