我是Java EE 6新手,甚至更新到Spring。我正在嘗試注入EclipseLink JPA EntityManager,並且正在探索實現這一點的不同方式。我正在使用Glassfish和Derby。在下面的示例中,我試圖將EntityManager直接注入到servlet或控制器中以實現簡單性,實際上我將有一個包裝EntityManager的DAO類。使用Spring vs Java EE注入JPA EntityManager 6
在Java EE 6,I可以如下定義一個servlet:
@WebServlet(urlPatterns="/app/*")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
@PersistenceContext
private EntityManager entityManager;
}
實體管理正確,沒有進一步的配置注入。
現在我想使用Spring,最好通過註釋。目前,如下我可以定義一個控制器:
@Controller
@RequestMapping("/testurl.htm")
public class ExampleController {
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
}
爲了春季正確連接東西,我需要在我的應用程序上下文XML文件中的下列指令:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myPU"/>
</bean>
如果我不包括上面的片段中,我得到上部署一個例外: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0
看了this我的印象是我不需要以上的XML片段。任何人都可以確認,如果上述片段將永遠是必需的?是否有另一種方法 - 如果一個EntityManager被Java EE容器成功注入到我的FrontController servlet中,那麼如何將這個相同的EntityManager注入到我的Spring應用程序上下文中並將其提供給其他spring bean?
注入你的EM到服務層,而不是你控制器 – NimChimpsky 2012-02-09 11:56:20