- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
4.3 启动示例代码
应用程序的组件现在已经就绪了,所以我们现在将其启动起来并运行在 Spring 容器之中。为了做到这一点,我们需要做两件事:首先,需要配置通用的 JPA 基础设施(如连接数据库的 DataSource 以及 JPA EntityManagerFactory)。对于前者,我们会使用 HSQL,它是支持运行在内存之中的数据库。对于后一个问题,我们选择使用 Hibernate 作为持久化厂商。在示例工程的 pom.xml 文件中建立了对它的依赖。其次,需要构建 Spring 容器,这个容器会找到存储实现并为其创建一个 Bean 实例。在示例 4-10 中,会有一个 Spring 的 JavaConfig 配置类,它会完成上面提到的各个步骤。
示例 4-10 Spring 的 JavaConfig 配置
@Configuration 注解声明了这个类为 Spring 的 JavaConfig 配置类。@ComponentScan 会命令 Spring 扫描 ApplicationConfig 所在的包及其子包来查找 Spring 组件(带有 @Service、@Repository 等注解的类)。@EnableTransactionManagement 为带有 @Transactional 注解的方法启用 Spring 管理的事务。
带有 @Bean 注解的方法现在声明了如下的基础设施组件:dataSource() 将会借助 Spring 对内嵌数据库的支持创建一个内嵌数据源。这样可以很容易地搭建各种内存数据库用于测试,这基本上不用什么配置。我们在这里选择的是 HSQL(其他的可选方案包括 H2 或 Derby)。在此之上,我们配置了一个 EntityManagerFactory。
在这里使用了 Spring 3.1 的新特性,它可以让我们完全不用创建 persistence.xml 文件来声明实体类,而是通过 LocalContainerEntityManagerFactoryBean 类的 packagesToScan 属性实现对 Spring 的类路径的扫描。这会触发 Spring 扫描那些带有 @Entity 和 @MappedSuperclass 注解的类,并且会自动将其加入到 JPA PersistenceUnit 之中。
相同的配置功能如果用 XML 的话,如示例 4-11 所示。
示例 4-11 基于 XML 的 Spring 配置
在这个示例代码的底部,<jdbc:embedded-database />创建了使用 HSQL 的内存数据源。LocalContainerEntityManagerFactoryBean 与我们刚刚在 JavaConfig 场景(见示例 4-10)中所看到的代码类似。在此之上,我们声明了 JpaTransactionManager 并激活了基于注解的事务配置以及扫描组件的基础包。需要注意的一点是,示例 4-11 中的 XML 配置与示例工程中 META-INF/spring/application-context.xml 文件稍微有些不同。因为示例代码的目标是基于 Spring Data JPA 的数据访问层实现,它会废弃掉一些刚刚看到的配置。
示例的应用类会创建 AnnotationConfigApplicationContext,它会使用 Spring 的 JavaConfig 配置类来启动应用组件(如示例 4-12 所示)。我们在 ApplicationConfig 配置类中所声明的基础设施组件以及添加注解的存储实现将会被找到并实例化。因此,可以使用 CustomerRepository 类型的 Spring Bean 来创建 Customer、对其进行存储并按照它的电子邮件地址进行查找。
示例 4-12 启用示例代码
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论