建立倉庫例項
本節介紹如何為定義的倉庫介面建立例項和 Bean 定義。
Java 配置
在 Java 配置類上使用儲存特有的 @EnableJpaRepositories
註解來定義倉庫啟用配置。有關 Spring 容器的基於 Java 的配置介紹,請參閱 Spring 參考文件中的 JavaConfig。
啟用 Spring Data 倉庫的示例配置如下所示:
@Configuration
@EnableJpaRepositories("com.acme.repositories")
class ApplicationConfiguration {
@Bean
EntityManagerFactory entityManagerFactory() {
// …
}
}
前面的示例使用了 JPA 特有的註解,您需要根據實際使用的儲存模組進行更改。這同樣適用於 EntityManagerFactory bean 的定義。請參閱介紹儲存特有配置的部分。 |
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
@EnableJpaRepositories(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
結尾的介面被例項化。