添加缺失的超载API方法。

本节介绍如何添加你自己的超载API方法以实现新功能。spring-doc.cadn.net.cn

实现自定义搜索方法

LdapTemplate包含多个最常见作的超载版本。DirContext.然而,我们并没有为每一种方法签名提供替代方案,主要是因为它们数量太多。不过,我们已经提供了拨打任意电话的方式DirContext你想要的方法,同时还能获得好处LdapTemplate提供。spring-doc.cadn.net.cn

假设你想调用以下DirContext方法:spring-doc.cadn.net.cn

NamingEnumeration search(Name name, String filterExpr, Object[] filterArgs, SearchControls ctls)

在 中没有对应的超载方法LdapTemplate.解决方法是使用自定义SearchExecutor实现方式如下:spring-doc.cadn.net.cn

public interface SearchExecutor {
   public NamingEnumeration executeSearch(DirContext ctx) throws NamingException;
}

在你的自定义执行程序中,你可以访问一个DirContext对象,你可以用它来调用你想要的方法。然后你可以提供一个处理程序,负责映射属性并收集结果。例如,你可以使用可用的实现之一CollectingNameClassPairCallbackHandler,该系统将映射的结果收集到内部列表中。为了实际进行搜索,你需要联系搜索方法LdapTemplate这需要执行人和处理人作为论据。最后,你需要归还你的训导员收集的所有东西。以下示例展示了如何实现这些:spring-doc.cadn.net.cn

例子1。一种自定义搜索方法SearchExecutor属性映射器
public class PersonRepoImpl implements PersonRepo {
   ...
   public List search(final Name base, final String filter, final String[] params,
         final SearchControls ctls) {
      SearchExecutor executor = new SearchExecutor() {
         public NamingEnumeration executeSearch(DirContext ctx) {
            return ctx.search(base, filter, params, ctls);
         }
      };

      CollectingNameClassPairCallbackHandler handler =
         new AttributesMapperCallbackHandler(new PersonAttributesMapper());

      ldapTemplate.search(executor, handler);
      return handler.getList();
   }
}

如果你更喜欢上下文地图前往属性映射器,以下示例展示了它的样子:spring-doc.cadn.net.cn

例子2。一种自定义搜索方法SearchExecutor上下文地图
public class PersonRepoImpl implements PersonRepo {
   ...
   public List search(final Name base, final String filter, final String[] params,
         final SearchControls ctls) {
      SearchExecutor executor = new SearchExecutor() {
         public NamingEnumeration executeSearch(DirContext ctx) {
            return ctx.search(base, filter, params, ctls);
         }
      };

      CollectingNameClassPairCallbackHandler handler =
         new ContextMapperCallbackHandler(new PersonContextMapper());

      ldapTemplate.search(executor, handler);
      return handler.getList();
   }
}
当你使用ContextMapperCallbackHandler你必须确认你已经打过电话setReturningObjFlag(true)在你的搜索控制实例。

实现其他自定义上下文方法

与习俗方式相同搜索方法,你实际上可以调用任何方法DirContext通过使用上下文执行者如下:spring-doc.cadn.net.cn

public interface ContextExecutor {
   public Object executeWithContext(DirContext ctx) throws NamingException;
}

实现自定义时上下文执行者,你可以选择使用executeReadOnly()或者executeReadWrite()方法。假设你想调用以下方法:spring-doc.cadn.net.cn

Object lookupLink(Name name)

该方法可在DirContext,但 中没有匹配方法LdapTemplate.这是一种查找方法,所以应该是只读的。我们可以这样实现:spring-doc.cadn.net.cn

例子3。一个习俗DirContext方法上下文执行者
public class PersonRepoImpl implements PersonRepo {
   ...
   public Object lookupLink(final Name name) {
      ContextExecutor executor = new ContextExecutor() {
         public Object executeWithContext(DirContext ctx) {
            return ctx.lookupLink(name);
         }
      };

      return ldapTemplate.executeReadOnly(executor);
   }
}

同样地,你可以通过使用executeReadWrite()方法。spring-doc.cadn.net.cn