建立儲存庫實例
本節介紹如何為已定義的儲存庫介面建立實例和 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
,以建立適當的 Proxy 來處理查詢方法的調用。每個 Bean 都以從介面名稱衍生的 Bean 名稱註冊,因此 UserRepository
介面將在 userRepository
下註冊。巢狀儲存庫介面的 Bean 名稱會加上其封閉類型名稱作為前綴。基礎套件屬性允許使用萬用字元,以便您可以定義掃描套件的模式。
使用篩選器
預設情況下,基礎架構會選取每個擴展特定於持久化技術的 Repository
子介面,且位於配置的基礎套件下的介面,並為其建立 Bean 實例。但是,您可能希望更細緻地控制為哪些介面建立 Bean 實例。若要執行此操作,請在儲存庫宣告內使用篩選器元素。語意與 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
結尾的介面,使其不被實例化。
獨立使用
您也可以在 Spring 容器之外使用儲存庫基礎架構,例如在 CDI 環境中。您仍然需要在您的類別路徑中包含一些 Spring 程式庫,但一般來說,您也可以透過程式碼設定儲存庫。提供儲存庫支援的 Spring Data 模組附帶了特定於持久化技術的 RepositoryFactory
,您可以按照以下方式使用:
RepositoryFactorySupport factory = … // Instantiate factory here
UserRepository repository = factory.getRepository(UserRepository.class);