开发者社区> 问答> 正文

@PersistenceContext 线程安全的疑问

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

Java代码 收藏代码

public class BrandServiceDao implements BrandDao {  
       
    @PersistenceContext  
    protected EntityManager entityManager;  
       
    // business   
}

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

我自己做了下模拟,也许方式不对,拿到的entityManager(代理对象)的hashcode都是一样的 嗯 原模原样的输出是: Java代码 收藏代码

Shared EntityManager proxy for target factory [org.springframework.orm.jpa.LocalEntityManagerFactoryBean@1b64ef8]

共享的entityManager代理?

展开
收起
长安归故里. 2020-01-08 16:29:13 1063 0
1 条回答
写回答
取消 提交回答
  • entityManager 线程不安全的

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

    SharedEntityManagerCreator来创建代理

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

    2020-01-08 16:29:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JAVA反射原理以及一些常见的应用 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载