建立 Repository 例項
本節介紹如何為已定義的儲存庫介面建立例項和 bean 定義。
Java 配置
在 Java 配置類上使用特定於儲存的 @EnableNeo4jRepositories 註解來定義儲存庫啟用的配置。有關 Spring 容器 Java 配置的介紹,請參閱 Spring 參考文件中的 JavaConfig。
啟用 Spring Data 儲存庫的示例配置如下所示
@Configuration
@EnableJpaRepositories("com.acme.repositories")
class ApplicationConfiguration {
@Bean
EntityManagerFactory entityManagerFactory() {
// …
}
}
前面的示例使用 JPA 特定的註解,您應該根據實際使用的儲存模組進行更改。這同樣適用於 EntityManagerFactory bean 的定義。請參閱涵蓋特定於儲存的配置的章節。 |
屬性佔位符和 Ant 風格模式
@EnableNeo4jRepositories 中的 basePackages 和 value 屬性支援 ${…} 屬性佔位符,這些佔位符將針對 Environment 解析,以及 Ant 風格的包模式,例如 "org.example.**"。
以下示例為 @EnableNeo4jRepositories 中的隱式 value 屬性指定了 app.scan.packages 屬性佔位符。
-
Java
-
Kotlin
@Configuration
@EnableNeo4jRepositories("${app.scan.packages}") (1)
public class ApplicationConfiguration {
// …
}
| 1 | app.scan.packages 屬性佔位符將針對 Environment 進行解析 |
@EnableNeo4jRepositories(["\${app.scan.packages}"]) (1)
class ApplicationConfiguration {
// …
}
| 1 | app.scan.packages 屬性佔位符將針對 Environment 進行解析 |
XML 配置
每個 Spring Data 模組都包含一個 repositories 元素,允許您定義 Spring 將為您掃描的基包,如以下示例所示
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
<jpa:repositories base-package="com.acme.repositories" />
</beans:beans>
在前面的示例中,Spring 被指示掃描 com.acme.repositories 及其所有子包,以查詢擴充套件 Repository 或其子介面的介面。對於找到的每個介面,基礎設施會註冊永續性技術特定的 FactoryBean 以建立適當的代理來處理查詢方法的呼叫。每個 bean 都以從介面名稱派生的 bean 名稱註冊,因此 UserRepository 介面將註冊為 userRepository。巢狀儲存庫介面的 bean 名稱以其封閉型別名稱為字首。基包屬性允許使用萬用字元,以便您可以定義掃描包的模式。
使用過濾器
預設情況下,基礎設施會獲取配置的基包下擴充套件永續性技術特定的 Repository 子介面的每個介面,併為其建立一個 bean 例項。但是,您可能希望對哪些介面建立 bean 例項進行更精細的控制。為此,請在儲存庫宣告中使用 filter 元素。其語義與 Spring 元件過濾器中的元素完全等效。有關詳細資訊,請參閱 Spring 參考文件中有關這些元素的說明。
例如,要將某些介面從例項化為儲存庫 bean 中排除,可以使用以下配置
-
Java
-
XML
@Configuration
@EnableNeo4jRepositories(basePackages = "com.acme.repositories",
includeFilters = { @Filter(type = FilterType.REGEX, pattern = ".*SomeRepository") },
excludeFilters = { @Filter(type = FilterType.REGEX, pattern = ".*SomeOtherRepository") })
class ApplicationConfiguration {
@Bean
EntityManagerFactory entityManagerFactory() {
// …
}
}
<repositories base-package="com.acme.repositories">
<context:include-filter type="regex" expression=".*SomeRepository" />
<context:exclude-filter type="regex" expression=".*SomeOtherRepository" />
</repositories>
前面的示例包括所有以 SomeRepository 結尾的介面,並排除了以 SomeOtherRepository 結尾的介面不被例項化。
獨立使用
您還可以在 Spring 容器之外使用儲存庫基礎設施,例如在 CDI 環境中。您仍然需要在類路徑中包含一些 Spring 庫,但通常您也可以以程式設計方式設定儲存庫。提供儲存庫支援的 Spring Data 模組附帶了一個永續性技術特定的 RepositoryFactory,您可以按如下方式使用它
RepositoryFactorySupport factory = … // Instantiate factory here
UserRepository repository = factory.getRepository(UserRepository.class);