我的应用无法自动装配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为空?
答案 0 :(得分:4)
对于弹簧使用注释进行自动装配,你必须告诉春天。在您的xml配置中(假设您还没有context:component-scan
元素)添加context:annotation-config
。这将指示spring应用程序上下文扫描注释(如@Autowired
,@Inject
,@Resource
等)以进行自动装配。
还要确保要将EntityManagerFactory
注入的类(Engine
类)是一个Spring托管bean。 Spring只会向spring managed beans注入引用。
答案 1 :(得分:2)
你试过这个吗?
private EntityManagerFactory entityManagerFactory;
@Autowired
@PersistenceUnit(unitName = "myUnitName")
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
this.entityManagerFactory = entityManagerFactory;
}
我前段时间遇到了同样的错误,我发现这是一个解决方案。
答案 2 :(得分:0)
如果您使用Engine
(new Engine()
(如您的一条评论中所述)使@Component
变形,则不会由Spring管理。 {{1}}没有效果,依赖关系不会被注入。你需要注射引擎。