2013-08-23 53 views
2

我的應用程序無法autowire entityManagerFactory。@Autowired entityManagerFactory爲空

的applicationContext.xml

<tx:annotation-driven/> 
<context:component-scan base-package="top.level.package" /> 

<bean id="persistenceUnitManager"  
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> 
    <property name="persistenceXmlLocation"> 
     <value>classpath:jpa-persistence.xml</value> 
    </property> 
</bean> 

<bean id="entityManagerFactory"  
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitManager" ref="persistenceUnitManager" /> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

java類

@Component 
public class Engine { 

    @Autowired 
    @Qualifier("entityManagerFactory") 
    private EntityManagerFactory entityManagerFactory; 
...... 
} 

問:

的entityManagerFactory爲何爲空?

+2

如何獲得引擎實例? –

+0

可能是因爲'@Qualifier(「entityManagerFactory」)'。您沒有在您的xml配置中符合emf –

+0

@orid它通過'id'屬性。 –

回答

4

對於使用註釋進行自動編碼的春天,你必須告訴春天。在你的xml配置中(假設你還沒有context:component-scan元素)添加一個context:annotation-config。這將指示春季應用上下文掃描註釋(如@Autowired,@Inject,@Resource等)以進行自動裝配。

還要確保你想要EntityManagerFactory被注入的類(Engine類)是一個spring管理bean。 Spring只會將引用注入到Spring管理的bean中。

+0

我已經 ,但它不起作用 –

+1

是你的'引擎類是一個彈簧管理bean?或者你自己在構建實例嗎? Spring只會將依賴關係注入到它所瞭解和管理的bean中。 –

+0

你是對的!我在春天就知道,從來沒有想過創建一個引擎作爲POJO的事實。請將此添加到您的答案中,我會接受它 –

2

你試過了嗎?

private EntityManagerFactory entityManagerFactory; 

@Autowired 
@PersistenceUnit(unitName = "myUnitName") 
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { 
    this.entityManagerFactory = entityManagerFactory; 
} 

前段時間我有同樣的錯誤,我發現這是一個解決方案。

+0

它對我不起作用。相同的結果 - entityManagerFactory爲空 –

0

如果您使用new Engine()(如您的其中一條評論中所述)使您的Engine詭異,則它不受Spring的管理。 @Component沒有效果,並且依賴項不會被注入。你需要注入你的引擎。

相關問題