EntityManager
根据定义,它不是线程安全的。Servlets 规范说,在非分布式环境中并且没有实现SingleThreadModel
,每个定义只有一个 servlet 实例。
因此,在 Java EE 中,当您EntityManager
通过@PersistenceContext
Servlet 的字段注入一个 - 它不是线程安全的:
public class MyServlet extends HttpServlet {
// Not thread-safe, should be using EMF instead.
@PersistenceContext
private EntityManager em;
}
这是正确的说法,即使 Spring bean 的默认范围是单例的,它
EntityManager
是线程安全的,因为 Spring 使用它ThreadLocal
来绑定它的事务和EntityManager
它?上面的 Servlets 示例在 Spring 中仍然有效吗?它仍然不是线程安全的吗?
该方法是否
ThreadLocal
仅适用于 Spring 托管 bean,而普通 servlet 不是其中之一?据我记得,注入
EntityManager
. 在 Glassfish Java EE 实现中,发现@PersistenceContext
as 注入点的是应用服务器。
春天的时候是什么样子的?Spring Framework 是负责发现这些注释还是由 JPA 实现者负责?