集成 Spring、JPA
2014-12-12 本文已影响232人
并肩走天涯
Java RESTful
- 集成
-
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)
-
-
JPA
JPA 2.1 是 Java EE 7 的标准之一。
- JPA 2.1 配置
- JPA 注解
- MySQL 配置
-