跳转至内容

Java 持久化/Spring

来自维基教科书,为开放世界提供开放书籍

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 注解,以便注入 EntityManagerEntityManagerFactory。Spring 支持类似于 JEE 的受管理事务性 EntityManager,其中 EntityManager 将自身绑定为新的持久化上下文到每个新的事务,并在事务中提交。Spring 支持 JTA 集成和它自己的事务管理器。

Spring JPA 部署示例

[编辑 | 编辑源代码]
<?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>
华夏公益教科书