1、TransactionSynchronizationManager,事务资源同步,ThreadLocal都在这里。
2、SharedEntityManagerCreator,entitymanager的创建入口都是通过该类,该类被EntityManagerBeanDefinitionRegistrarPostProcessor注册到beanfactory中,依赖EntityManager bean实例的,都会调用该类的工厂方法createSharedEntityManager,而该工厂方法的参数是EntityManagerFactory,通过BeanDefinitionUtils找到类型为“EntityManagerFactory.class, AbstractEntityManagerFactoryBean.class”的所有BeanDefinition,针对找到的每个BeanDefinition,注册一个EntityManager的BeanDefinition(实际是通过SharedEntityManagerCreator的createSharedEntityManager方法创建的)
EntityManagerBeanDefinitionRegistrarPostProcessor的注释:主要用于构造函数引用EntityManager的,并且使用了qualifier 注解的,对于多个EntityManagerFactory中指定一个是有效的方式。
3、PersistenceAnnotationBeanPostProcessor用来处理persistencecontext,persistenceunit两个注解,用来注入EntityManager,实际上注入方式和上面一样,只不过是直接调用SharedEntityManagerCreator的createSharedEntityManager方法,位于PersistenceAnnotationBeanPostProcessor$PersistenceElement类内。
4、EntityManager不是线程安全的,EntityManagerFactory是线程安全的,所以需要每次都在线程中生成新的EntityManager。而spring通过SharedEntityManagerCreator在创建时增加Proxy的方式,间接的实现了线程安全,因为注入到容器的EntityManager是个Proxy,所有的调用会委托给SharedEntityManagerInvocationHandler去处理。
5、JpaRepository中的EntityManager的注入也是通过SharedEntityManagerCreator的工厂方法创建的。参见JpaRepositoryConfigExtension.getEntityManagerBeanDefinitionFor
6、JpaRepositoryFactoryBean是创建JpaRepository的工厂类,实际创建过程委托给JpaRepositoryFactory类执行,在创建JpaRepositoryFactory时,通过加入TransactionalRepositoryProxyPostProcessor,在创建JpaRepository过程中加入TransactionInterceptor,执行JpaRepository方法时,会自动加入事务处理。TransactionInterceptor中会注入配置的TransactionManager(比如JpaTransactionManager)
7、@Transactional注解,也是生成TransactionInterceptor的代理,原理同上。
8、直接通过注入EntityManger执行查询或者保存操作的,由于注入的EntityManager是SharedEntityManagerInvocationHandler的Proxy,会通过EntityManagerFactoryUtils.doGetTransactionalEntityManager获取已经存在的事务的EntityManager,如果不存在,则会创建一个EntityManager,等调用结束,关闭该新建的EntityManager。
9、JpaMetamodelMappingContextFactoryBean用来生成JpaMetamodelMappingContext,该FactoryBean创建实例时,遍历所有的EntityManagerFactory,调用EntityManagerFactory.getMetamodel,将所有的Metamodel加入到一个集合,然后传入JpaMetamodelMappingContext,在将来创建Entity时使用。
相关推荐
Spring Data JPA Examples 官方源码,很详细
spring data jpa 实例源码 spring data jpa 实例源码 spring data jpa 实例源码
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
项目源码介绍了Jpa + Spring的整合,一套最新源码
Spring Data JPA中文文档1.4.3
自己闲着没事,写了个spring jpa的简单实现,主要是数据库中student中的学生信息显示到页面中。实现一个简单的功能。
框架整合 SpringBoot+SpringDataJpa+FreeMarker源码样例
maven+springmvc+springjpa+hibernate简单例子,有需要的朋友可以参考看看,没费的哦。
spring注解完整版+spring data jpa官方文档中文翻译+JPA2.0官方文档 文档内容齐全 值得参考学习
JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
本系统是基于Thymeleaf+SpringBoot+SpringDataJPA实现的的中小医院信息管理系统。简单实现了挂号收费,门诊管理,划价收费,药房取药,体检管理,药房管理,系统维护等基础功能。就诊卡提供了手动和读卡两种方式录入...
内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观锁、SpEL表达式在SpringData里面的应用...
spring+springMVC+spring-data-jpa+freemarket/json
spring mvc spring jpa集成 mysql
#boot-jpa-security-dmdb-freemark spring boot spring security 达梦数据库 ftl assembly 打包
springdatajpa 包括jar包 结合struts2 spring 和springdatajpa 注解
velocity spring jpa hibernate 整合
网站开发运用jar包,spring框架下jpa数据库操作使用整理打包