@PersistenceContext 线程安全的疑问

在spring+jpa情况下,经常这么写service层或dao层

[code="java"]
public class BrandServiceDao implements BrandDao {

@PersistenceContext
protected EntityManager entityManager;

// business 

}
[/code]
一般service和dao都被是singleton 但这种情况下,
entityManager没有线程安全问题么
或者说这么证明不同线程拿到的entityManager是不同的实例对象

我自己做了下模拟,也许方式不对,拿到的entityManager(代理对象)的hashcode都是一样的
嗯 原模原样的输出是:
[code="java"]Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalEntityManagerFactoryBean@1b64ef8][/code]
共享的entityManager代理?

entityManager 线程不安全的

共享的entityManager代理?
你猜对了 spring提供了EntityManager 的 代理 EntityManagerProxy

SharedEntityManagerCreator来创建代理

return (EntityManager) Proxy.newProxyInstance(
(cl != null ? cl : SharedEntityManagerCreator.class.getClassLoader()),
ifcs, new SharedEntityManagerInvocationHandler(emf, properties));