我是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