返回介绍

4.3 启动示例代码

发布于 2025-04-22 19:57:18 字数 2225 浏览 0 评论 0 收藏

应用程序的组件现在已经就绪了,所以我们现在将其启动起来并运行在 Spring 容器之中。为了做到这一点,我们需要做两件事:首先,需要配置通用的 JPA 基础设施(如连接数据库的 DataSource 以及 JPA EntityManagerFactory)。对于前者,我们会使用 HSQL,它是支持运行在内存之中的数据库。对于后一个问题,我们选择使用 Hibernate 作为持久化厂商。在示例工程的 pom.xml 文件中建立了对它的依赖。其次,需要构建 Spring 容器,这个容器会找到存储实现并为其创建一个 Bean 实例。在示例 4-10 中,会有一个 Spring 的 JavaConfig 配置类,它会完成上面提到的各个步骤。

示例 4-10 Spring 的 JavaConfig 配置

c0410-1

c0410-2

@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 配置

c0411-1

c0411-2

在这个示例代码的底部,<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 启用示例代码

c0412

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。