服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 往DAO类中注入@PersistenceContext和@Resource的区别详解

往DAO类中注入@PersistenceContext和@Resource的区别详解

2022-07-24 19:13JeeLearner Java教程

这篇文章主要介绍了往DAO类中注入@PersistenceContext和@Resource的区别详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

DAO类注入@PersistenceContext和@Resource区别

@PersistenceContext

?
1
private EntityManager em;

注入的是实体管理器,执行持久化操作的,需要配置文件persistence.xml。

注入一堆保存实体类状态的数据结构,针对实体类的不同状态(四种,managedh或detached等)可以做出不同的反应(merge,persist等等),其实就是把数据从数据库里提出,然后在内存里处理的,再返回数据库的法则。

@Resource

是注入容器提供的资源对象,比如SessionContext MessageDrivenContext。或者你那个name指定的JNDI对象

可以理解为资源->数据源->也就是数据连接,基本上就是告诉程序数据库在哪里 

JPA中为什么EntityManager的注解要用@PersistenceContext

在使用SpringJPA的时候,看到如下代码

?
1
2
@PersistenceContext
private EntityManager entityManager;

于是就有些好奇,这个@PersistenceContext是几个意思,如果是实体注入的话,统一采用

@Autowired可以吗?于是上网查了下,几乎所有的EntityManager都是采用这个注解的,就去找了找原因。

往DAO类中注入@PersistenceContext和@Resource的区别详解

根据上面的描述,总结如下

  • @PersistenceContext是jpa专有的注解,而@Autowired是spring自带的注释
  • EntityManager不是线程安全的,当多个请求进来的时候,spring会创建多个线程,@PersistenceContext就是用来为每个线程创建一个EntityManager的,而@Autowired只创建了一个,为所有线程共用,有可能报错
  • 在使用EntityManager的时,请采用@PersistenceContext进行注解,而不要使用@Autowired

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/IT_lyd/article/details/72818153

延伸 · 阅读

精彩推荐
  • Java教程详解Spring不同数据库异常如何抽象的

    详解Spring不同数据库异常如何抽象的

    根据spring-jdbc中的定义,所有的数据操作异常都会转换为 DataAccessException,下面这篇文章主要给大家介绍了关于Spring不同数据库异常如何抽象的相关资料,需要的...

    程序员阿牛6812021-12-22
  • Java教程整理总结Java多线程程序编写的要点

    整理总结Java多线程程序编写的要点

    这篇文章主要介绍了Java多线程程序编写的要点,包括线程的状态控制和优先级以及线程的通信问题等方面,非常之全面!需要的朋友可以参考下 ...

    memristor2012020-03-25
  • Java教程Spring与Spring boot的区别介绍

    Spring与Spring boot的区别介绍

    Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置。接下来通过本文给大家介绍Spring与Spring boot的区别介绍,非常不错,需要...

    Java教程网3912020-09-08
  • Java教程java jdk动态代理详解

    java jdk动态代理详解

    动态代理类的Class实例是怎么生成的呢,是通过ProxyGenerator类来生成动态代理类的class字节流,把它载入方法区 ...

    java技术网2182019-10-14
  • Java教程springboot整合Quartz实现动态配置定时任务的方法

    springboot整合Quartz实现动态配置定时任务的方法

    本篇文章主要介绍了springboot整合Quartz实现动态配置定时任务的方法,非常具有实用价值,需要的朋友可以参考下...

    牛奋lch5162021-01-18
  • Java教程Java方法反射实现原理详解

    Java方法反射实现原理详解

    这篇文章主要为大家详细介绍了Java方法反射的实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    维C果糖6012021-01-20
  • Java教程java根据网络地址保存图片的方法

    java根据网络地址保存图片的方法

    这篇文章主要为大家详细介绍了java根据网络地址保存图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    小爷胡汉三8062021-05-14
  • Java教程java教学笔记之对象的创建与销毁

    java教学笔记之对象的创建与销毁

    面向对象的编程语言使程序能够直观的反应客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法进行软件开发,是当今...

    hebedich2382020-03-25