本节介绍如何配置 Spring Data LDAP。 可以通过在XML配置中使用标记或对配置类使用注释来启用Spring LDAP存储库:<data-ldap:repositories>@EnableLdapRepositoriesSpring中文文档

要在自动生成的存储库中包含对参数的支持,请让接口扩展而不是 。LdapQueryLdapRepositoryCrudRepositorySpring中文文档

所有Spring LDAP存储库都必须使用使用ODM注释注释的实体,如对象目录映射中所述。Spring中文文档

由于所有 ODM 托管类都必须具有可分辨名称作为 ID,因此所有 Spring LDAP 存储库都必须将 ID 类型参数设置为 。javax.naming.NameSpring中文文档

实际上,内置的实体只采用一个类型参数:托管实体类,该类默认 ID 为 。LdapRepositoryjavax.naming.NameSpring中文文档

由于 LDAP 协议的特殊性,Spring LDAP 存储库不支持分页和排序。Spring中文文档

必须使用 ODM 注释,例如 . 使用 Spring Data 的注解不起作用,因为 Spring LDAP 使用自己的映射层。org.springframework.ldap.odm.annotations.Id
必须使用 ODM 注释,例如 . 使用 Spring Data 的注解不起作用,因为 Spring LDAP 使用自己的映射层。org.springframework.ldap.odm.annotations.Id

基于注释的配置

Spring Data LDAP 存储库支持可以通过 JavaConfig 和自定义 XML 命名空间激活,如以下示例所示:Spring中文文档

例 1.使用 JavaConfig 的 Spring Data LDAP 存储库
@Configuration
@EnableLdapRepositories("com.acme.*.repositories")
class MyConfig {

  @Bean
  ContextSource contextSource() {

    LdapContextSource ldapContextSource = new LdapContextSource();

    ldapContextSource.setUserDn("cn=Admin");
    ldapContextSource.setPassword("secret");
    ldapContextSource.setUrl("ldap://127.0.0.1:389");

    return ldapContextSource;
  }

  @Bean
  LdapTemplate ldapTemplate(ContextSource contextSource) {
    return new LdapTemplate(contextSource);
  }
}

此配置将导致扫描基本包以查找扩展包含 LDAP 存储库的接口,并为找到的每个存储库创建 Spring bean。Spring中文文档

如果未配置基本包,基础结构将扫描带批注的配置类的包。Spring中文文档

Spring 命名空间

Spring Data 的 LDAP 模块包含一个自定义命名空间,允许定义存储库 bean。 它还包含 LDAP 特有的某些功能和元素属性。 通常,可以使用该元素设置 LDAP 存储库,如以下示例所示:repositoriesSpring中文文档

例 2.使用命名空间设置 LDAP 存储库
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ldap="http://www.springframework.org/schema/ldap"
  xmlns:data-ldap="http://www.springframework.org/schema/data/ldap"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/ldap
    https://www.springframework.org/schema/ldap/spring-ldap.xsd
    http://www.springframework.org/schema/data/ldap
    https://www.springframework.org/schema/data/ldap/spring-ldap.xsd">

  <ldap:context-source url="ldap://127.0.0.1:389"
                     username="cn=Admin"
                     password="secret" />

  <ldap:ldap-template />

  <data-ldap:repositories base-package="com.acme.*.repositories" />

</beans>

此配置将导致扫描基本包以查找扩展包含 LDAP 存储库的接口,并为找到的每个存储库创建 Spring bean。Spring中文文档

默认情况下,存储库会获取一个名为 的自动连线的 Spring bean,因此只有在偏离此约定时才需要显式配置。LdapTemplateldapTemplateldap-template-refSpring中文文档

JavaConfig 和 XML 哪个更好? XML 是很久以前 Spring 的配置方式。 在当今快速发展的 Java、记录类型、注释等时代,新项目通常尽可能多地使用纯 Java。 虽然没有立即删除 XML 支持的计划,但某些最新功能可能无法通过 XML 获得。

使用该元素查找 Spring Data 存储库,如创建存储库实例中所述。repositoriesSpring中文文档

自定义命名空间属性

除了存储库元素的默认属性之外,LDAP 命名空间还提供了其他属性,以便您更详细地控制存储库的设置:Spring中文文档

表 1.元素的自定义 LDAP 特定属性repositories

ldap-template-refSpring中文文档

显式连接要使用的存储库与元素检测到的存储库。如果应用程序中使用了多个 Bean,则通常使用。如果未配置,Spring Data 会自动查找名称为 的 Bean。LdapTemplaterepositoriesLdapTemplateLdapTemplateldapTemplateApplicationContextSpring中文文档

Spring Data LDAP 需要存在一个名为 bean 的 bean。 如果未定义此类 bean,则 Spring Data LDAP 会在应用程序上下文中注册一个默认实例。LdapMappingContextldapMappingContext
JavaConfig 和 XML 哪个更好? XML 是很久以前 Spring 的配置方式。 在当今快速发展的 Java、记录类型、注释等时代,新项目通常尽可能多地使用纯 Java。 虽然没有立即删除 XML 支持的计划,但某些最新功能可能无法通过 XML 获得。
表 1.元素的自定义 LDAP 特定属性repositories

ldap-template-refSpring中文文档

显式连接要使用的存储库与元素检测到的存储库。如果应用程序中使用了多个 Bean,则通常使用。如果未配置,Spring Data 会自动查找名称为 的 Bean。LdapTemplaterepositoriesLdapTemplateLdapTemplateldapTemplateApplicationContextSpring中文文档

Spring Data LDAP 需要存在一个名为 bean 的 bean。 如果未定义此类 bean,则 Spring Data LDAP 会在应用程序上下文中注册一个默认实例。LdapMappingContextldapMappingContext