注:閱讀此篇時,請確保你的開發(fā)環(huán)境已經(jīng)正常配置碧绞,可以正常使用命令行工具創(chuàng)建插件demo
簡介
此篇文章介紹Confluence插件中如何使用Confluence系統(tǒng)事件从藤,定制擴展功能。通過系統(tǒng)暴露的event事件守屉,獲取回調定制邏輯惑艇。需要注意的是通過事件訂閱的方式擴展功能前提是,Confluence系統(tǒng)有暴露的event。
事件注意事項(重要)
- 事件機制沒有循環(huán)監(jiān)測事件觸發(fā)的機制滨巴,所以事件監(jiān)聽器內需要注意不要導致循環(huán)事件思灌,舉例:一個監(jiān)聽SpaceModifiedEvent事件的listener,邏輯代碼中不能產(chǎn)生SpaceModifiedEvent事件
- 監(jiān)聽器listener需要實現(xiàn)spring bean生命周期管理接口InitializingBean和DisposableBean恭取,當整個插件啟用或者禁用的時候會觸發(fā)對應的afterPropertiesSet和destroy方法
- 事件機制觸發(fā)的操作都是同步操作泰偿,所以你需要保證你的監(jiān)聽器邏輯盡可能快速處理完成,不要影響整個系統(tǒng)的操作(十分重要)
創(chuàng)建一個簡單的監(jiān)聽器
- 類需要增加@Scanner注解
- 使用@ComponentImport注解導入依賴的系統(tǒng)處理類
- 使用@Autowried注釋構造器
- 在方法上增加@EventListener注解秽荤,并且方法接受參數(shù)為監(jiān)聽的event對象
示例代碼:
@Scanner
public class EventListener implements DisposableBean {
private EventPublisher eventPublisher;
@Autowired
public EventListener(@ComponentImport EventPublisher eventPublisher) {
eventPublisher.register(this); //注冊自己
}
// 點贊操作事件監(jiān)聽器
@EventListener
public void likeCreatedEvent(LikeCreatedEvent likeCreatedEvent) {
}
public void destroy() throws Exception {
// 釋放注冊監(jiān)聽器
eventPublisher.unregister(this);
}
}
創(chuàng)建好監(jiān)聽器后需要在atlassian-plugin.xml中注冊listener
<listener name="demo listener" class="cn.idocode.confluence.plugindemo.listener.EventListener"
key="eventListener">
<description>demo插件</description>
</listener>
event參考
根據(jù)需求查找使用事件甜奄,也可以根據(jù)源碼查詢,包地址是:com.atlassian.confluence.event.events
示例代碼
https://github.com/chaoyz/plugin-demo