跳轉至內容

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>
華夏公益教科書