集成 Spring、JPA

作者: 并肩走天涯 | 来源:发表于2014-12-12 17:10 被阅读232次

Java RESTful

  • 集成
    1. Spring

      • 依赖包

          <!-- jersey-spring -->
          <dependency>
              <groupId>org.glassfish.jersey.ext</groupId>
              <artifactId>jersey-spring3</artifactId>
              <version>${jersey.version}</version>
          </dependency>
          
          <!-- spring -->
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
              <version>${spring.version}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-web</artifactId>
              <version>${spring.version}</version>
              <scope>compile</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-test</artifactId>
              <version>${spring.version}</version>
              <scope>test</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-tx</artifactId>
              <version>${spring.version}</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-orm</artifactId>
              <version>${spring.version}</version>
          </dependency>
        

        org.glassfish.jersey.ext 这个包是为 Jersey 扩展功能所使用的。如果要集成 Spring,使用的 Jersey 版本不要小于 2.2。

      • 依赖注入

        • @Autowired
        • @Service ,表示该类是一种作为服务的组件(@Component)

        Spring IoC 是通过配置文件[default file: applicationContext.xml]来定义的。

              default-autowire="byName" default-lazy-init="true"
        

        和容器管理 Bean 相关的配置如下:

              // 当系统启动时,Spring 会根据此配置对 package 进行扫描,将注解为 @Component 的类,以及注解为 @Service 这样本身使用了 @Component 注解的类加载.
              <context:component-scan base-package="com.example" />
        
      • 面向切面的事务管理

        将数据库事务管理交给容器。需要注意的是,JPA 的写操作需要显示地提交事务。

              <tx:annotation-driven transaction-manager="transactionManager" />
              
              <!-- TransAction Manager JPA -->
              <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
                  <property name="entityManagerFactory" ref="entityManagerFactory" />
              </bean> 
        

        在写操作的方法上,使用注解 @Transactional 即可实现容器级别的 AOP 事务处理。

              @Transactional
              public void save(final Book entity) {
                  entityManager.persist(entity);
              }
              
              [
                  spring 容器启用事务的 begin 方法
                  save() 方法成功执行
                  spring 容器会 commit 此事务,否则 rollback 此事务
              ]
        
      • 集成测试

        在测试中保持 Spring 容器的存在性:

              @ContextConfiguration(locations = { "classpath:applicationContext.xml" })
              @RunWith(SpringJUnit4ClassRunner.class)
              public class TUMyServiceTest {
              ...
              }
        

        使用 @RunWith 注解利用 spring -> SpringJUnit4ClassRunner 类,使 JUnit 测试环境具备 spring 容器的功能。

      • Spring 注解

        • @Component
        • @Autowired
        • @Service ,表示该类是一种作为服务的组件(@Component)
        • @Transactional
        • @ContextConfiguration(locations = { "classpath:applicationContext.xml" })
        • @RunWith(SpringJUnit4ClassRunner.class)
    2. JPA

      JPA 2.1 是 Java EE 7 的标准之一。

      • JPA 2.1 配置
      • JPA 注解
      • MySQL 配置

相关文章

网友评论

    本文标题:集成 Spring、JPA

    本文链接:https://www.haomeiwen.com/subject/cogntttx.html