Java 持久化/Spring
外观
< Java 持久化
Spring 是一个用于 Java 的应用程序框架。Spring 是一个 IoC 容器,它允许使用不同的编程模型。Spring 类似于 JEE 服务器,因为它提供事务服务、XML 部署、注释处理、字节码编织和 JPA 集成。
Spring 中的持久化通常通过 DAO(数据访问对象)层完成。Spring DAO 层旨在封装持久化机制,因此无论使用 JDBC、JPA 还是原生 API,都会提供相同的应用程序数据访问 API。
Spring 还定义了一个类似于 JTA 的事务管理器实现。Spring 还支持类似于 SessionBeans 的事务性注解和 Bean。
Spring 对 JPA 有专门的支持,并且可以模拟 JEE 容器在 JPA 方面的一些功能。Spring 允许以容器管理模式部署 JPA 持久化单元。如果使用 spring-agent 启动 JVM,Spring 可以使用类似于 JEE 服务器的编织部署 JPA 持久化单元。Spring 还可以传递 Spring DataSource 并将它的事务服务与 JPA 集成。Spring 允许在任何 Spring bean 类中使用 @PersistenceUnit
和 @PersistenceContext
注解,以便注入 EntityManager
或 EntityManagerFactory
。Spring 支持类似于 JEE 的受管理事务性 EntityManager
,其中 EntityManager
将自身绑定为新的持久化上下文到每个新的事务,并在事务中提交。Spring 支持 JTA 集成和它自己的事务管理器。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="acme" />
<property name="persistenceUnitManager" ref="persistenceUnitManager" />
</bean>
<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="defaultDataSource" ref="dataSource" />
<property name="dataSources">
<map>
<entry>
<key>
<value>jdbc/__default</value>
</key>
<ref bean="dataSource" />
</entry>
<entry>
<key>
<value>jdbc/jta</value>
</key>
<ref bean="dataSource" />
</entry>
</map>
</property>
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="AcmeDao" class="org.acme.dao.AcmeDao">
<property name="entityManager" ref="entityManager" />
</bean>
</beans>