openfire(六)属性事件PropertyEventListener和PropertyEventDispatcher
在openfire中很多地方用到了类似如下的代码:
PropertyEventListener propListener = new PropertyEventListener() {
public void propertySet(String property, Map params) {
}
public void propertyDeleted(String property, Map params) {
}
public void xmlPropertySet(String property, Map params) {
}
public void xmlPropertyDeleted(String property, Map params) {
}
};
PropertyEventDispatcher.addListener(propListener);
其工作原理是怎么回事的呢?
先来看看PropertyEventDispatcher这个类,其类中有一个集合
private static Set<PropertyEventListener> listeners =
new CopyOnWriteArraySet<PropertyEventListener>();
用来存储PropertyEventListener,并提供增加和删除监听器的方法。
其事件类型有4种:
property_set,
property_deleted,
xml_property_set,
xml_property_deleted;
对于Property属性,很多操作是用JiveGlobals的相关方法,在另外的以篇文章中介绍了JiveGlobals有2种类型的属性管理,一种是基于XML本地文件的XMLProperties,一种是基于数据库ofproperty的数据库属性管理。
当调用JiveGlobals的put方法的时候,如:
public String put(String key, String value){
--前面的省略....
PropertyEventDispatcher.dispatchEvent(key, PropertyEventDispatcher.EventType.property_set, params); --此为触发对应的事件监听器。
}
其他的方法也是这个样。
此篇文章就到此,稍后会有更多关于openfire的个人解读。
联系方式(qq):851392159
出处:http://buerkai.iteye.com