使用spring-ldap 2.x ODM接口的spring-ldap和@attributes注释

时间:2014-07-30 11:27:12

标签: spring-ldap

Spring-LDAP ODM注释中似乎缺少一些东西。这是一个通过功能请求的问题,如果有更好的方式来提供此类请求,请说明。

我想将@Attribute标记为只读,因此它将从LDAP填充bean以供参考,但不会将其保留回ldap。对于通常情况,我建议将一个属性只读添加到@Attribute,默认为false。 *的默认属性错过了所有操作属性,其中一些非常有用,并且传输的数据超出了所需的数量,使用永远不会使用的属性减慢了ldap查询的速度。

这方面的一个例子;对于字面上只读,如entryUUID,etag等非常有用,如果你只希望将某些字段保留回ldap,那么你就无法使用它,因为当你保存bean时,bean无法持久保存到ldap豆子。但是,对于您希望在结构上阻止用户进行更新的一般字段,也会使用usefule。

您可以通过不注释只读字段来解决此问题,然后使用单独的调用手动填充只读字段。非常混乱并且会破坏查询速度。

同样在相关主题上,query()coudl有一个默认的属性列表,您已经在类中注释了这些属性,如:

public static String[] getBeanAttributes(Class<?> beanClass) {
    ArrayList<String> attrsObj = new ArrayList<>();
    for (Field field : beanClass.getDeclaredFields()) {
        if (field.isAnnotationPresent(Attribute.class)) {
            Attribute attr = field.getAnnotation(Attribute.class);
            attrsObj.add(attr.name());
        }
    }
    String[] attrs = attrsObj.toArray(new String[attrsObj.size()]);
    return attrs;
}

上面只返回你声明的属性的简单String [],传递给query.attributes() - 现在我意识到作为一个静态成员,query()是在bean类已知之前构建的,但至少在那里可以是像上面这样的辅助函数,或者是将bean类签名作为参数的查询属性()的方法签名。

1 个答案:

答案 0 :(得分:1)

我在Jira上创建了LDAP-312。感谢。