文档

Java™ 教程
隐藏目录
使用属性添加、替换绑定
步骤: Java 命名和目录接口
课程: 命名和目录操作

使用属性添加、替换绑定

在命名示例中,我们讨论了如何使用bind()rebind()等方法。DirContext接口包含了这些方法的重载版本,可以接受属性作为参数。您可以使用这些DirContext方法,在将绑定或子上下文添加到命名空间时,将属性与对象关联起来。例如,您可以创建一个Person对象,并将其绑定到命名空间,同时关联有关该Person对象的属性。

添加具有属性的绑定

DirContext.bind()用于向上下文中添加具有属性的绑定。它的参数包括对象的名称、要绑定的对象和一组属性。

// 创建要绑定的对象
Fruit fruit = new Fruit("orange");

// 创建要与对象关联的属性
Attributes attrs = new BasicAttributes(true); // 忽略大小写
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("organizationalUnit");
attrs.put(objclass);

// 执行绑定
ctx.bind("ou=favorite, ou=Fruits", fruit, attrs);

此示例创建了一个Fruit类的对象,并将其绑定到"ou=favorite"的名称,相对于ctx"ou=Fruits"上下文中。此绑定具有"objectclass"属性。如果您随后在ctx中查找"ou=favorite, ou=Fruits",您将获得fruit对象。如果您随后获取"ou=favorite, ou=Fruits"的属性,您将得到创建对象时使用的这些属性。以下是此示例的输出。

# java Bind
orange
attribute: objectclass
value: top
value: organizationalUnit
value: javaObject
value: javaNamingReference
attribute: javaclassname
value: Fruit
attribute: javafactory
value: FruitFactory
attribute: javareferenceaddress
value: #0#fruit#orange
attribute: ou
value: favorite

显示的额外属性和属性值用于存储有关对象(fruit)的信息。有关这些额外属性的详细讨论将在本教程中进行。

如果您运行此示例两次,第二次尝试将失败,并出现NameAlreadyBoundException异常。这是因为"ou=favorite"名称已经在"ou=Fruits"上下文中绑定。要使第二次尝试成功,您需要使用rebind()方法。

替换具有属性的绑定

DirContext.rebind() 用于添加或替换绑定及其属性。它接受与 bind() 相同的参数。然而,rebind() 的语义要求如果名称已经被绑定,则会解绑它并绑定新给定的对象和属性。

// 创建要绑定的对象
Fruit fruit = new Fruit("柠檬");

// 创建要与对象关联的属性
Attributes attrs = new BasicAttributes(true); // 忽略大小写
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("organizationalUnit");
attrs.put(objclass);

// 执行绑定
ctx.rebind("ou=favorite, ou=Fruits", fruit, attrs);

当你运行这个例子时,它会替换bind() 例子创建的绑定。

# java Rebind
柠檬
属性: objectclass
值: top
值: organizationalUnit
值: javaObject
值: javaNamingReference
属性: javaclassname
值: Fruit
属性: javafactory
值: FruitFactory
属性: javareferenceaddress
值: #0#fruit#lemon
属性: ou
值: favorite

上一页: 修改属性
下一页: 搜索