@EnableNeo4jRepositories 注解能够让 Spring Data Neo4j 自动生成 Neo4j Repository 实现。它的 basePackages 属性设置为 orders.db 包,这样它就会扫描这个包来查找(直接或间接)扩展 Repository 标记接口的其他接口。
Neo4jConfig 扩展自 Neo4jConfiguration,后者提供了多个便利的方法来配置 Spring Data Neo4j。在这些方法中,就包括 setBasePackage(),它会在 Neo4jConfig 的构造器中调用,用来告诉 Spring Data Neo4j 要在 orders 包中查找模型类。
在这里,凭证是通过注入的 Environment 获取到的,避免了在配置类中的硬编码。 Spring Data Neo4j 同时还提供了 XML 命名空间。如果你更愿意在 XML 中配置 Spring Data Neo4j 的话,那可以使用该命名空间中的 <neo4j:config> 和 <neo4j:repositories> 元素。在功能上,程序清单 12.9 所展示的配置与程序清单 12.8 中的 Java 配置是相同的。
<neo4j:config> 元素配置了如何访问数据库的细节。在本例中,它配置 Spring Data Neo4j 使用嵌入式的数据库。具体来讲,storeDirectory 属性指定了数据要持久化到哪个文件系统路径中。base-package 属性设置了模型类定义在哪个包中。
至于 <neo4j:repositories> 元素,它启用 Spring Data Neo4j 自动生成 Repository 实现的功能,它会扫描 orders.db 包,查找所有扩展 Repository 的接口。
如果要配置 Spring Data Neo4j 访问远程的 Neo4j 服务器,我们所需要做的就是声明 SpringRestGraphDatabasebean,并设置 <neo4j:config> 的 graphDatabase-Service 属性:
不管是通过 Java 还是通过 XML 来配置 Spring Data Neo4j,我们都需要确保模型类位于基础包所指定的包中(通过 @EnableNeo4jRepositories 的 basePackages 属性 或 <neo4j:config> 的 base-package 属性来进行设置)。它们都需要使用注解将其标注为节点实体或关联关系实体。这就是我们接下来的任务。
@Bean(destroyMethod="shutdown")
public GraphDatabaseService grapthDatabaseService() {
return new SpringRestGraphDatabser(
"http://graphdbserver:7474/db/data/");
}
@Bean(destroyMethod="shutdown")
public GraphDatabaseService grapthDatabaseService(Enviroment env) {
return new SpringRestGraphDatabser(
"http://graphdbserver:7474/db/data/",
env.getProperty("db.username"), env.getProperty("db.password"));
}