日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activiti源码 之 DataManager EntityManager

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti源码 之 DataManager EntityManager 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

by yan 20211223

閱讀了Activiti 相關源碼,記錄下對DataManager & EntityManager的理解。

DataManager

是一層相對底層的抽象,主要負責數據的持久化操作。
通過DbSqlSession實現數據庫的CRUD,DbSqlSession 是Activiti里對底層session的一個封裝。默認使用了Mybatis的SqlSession操作數據庫。
Activiti 封裝了幾種session。如圖

通過EntityCache實現數據的緩存操作。EntityCache是Activiti封裝一個緩存機制。存儲結構是一個Map<Class<?>, Map<String, CachedEntity>>,一個二層map使用類作為key,每個類對應有多個對象,類有繼續關系,如果找不到父類的key,就找子類的key。如下代碼

public class EntityCacheImpl implements EntityCache {protected Map<Class<?>, Map<String, CachedEntity>> cachedObjects = new HashMap<Class<?>, Map<String,CachedEntity>>();@Overridepublic CachedEntity put(Entity entity, boolean storeState) {Map<String, CachedEntity> classCache = cachedObjects.get(entity.getClass());if (classCache == null) {classCache = new HashMap<String, CachedEntity>();cachedObjects.put(entity.getClass(), classCache);}CachedEntity cachedObject = new CachedEntity(entity, storeState);classCache.put(entity.getId(), cachedObject);return cachedObject;}@Override@SuppressWarnings("unchecked")public <T> T findInCache(Class<T> entityClass, String id) {CachedEntity cachedObject = null;Map<String, CachedEntity> classCache = cachedObjects.get(entityClass);if (classCache == null) {classCache = findClassCacheByCheckingSubclasses(entityClass);}if (classCache != null) {cachedObject = classCache.get(id);}if (cachedObject != null) {return (T) cachedObject.getEntity();}return null;}protected Map<String, CachedEntity> findClassCacheByCheckingSubclasses(Class<?> entityClass) {for (Class<?> clazz : cachedObjects.keySet()) {if (entityClass.isAssignableFrom(clazz)) {return cachedObjects.get(clazz);}} .... }

EntityManager

是相對DataManager 上層的一層封裝。主要負責操作Entity實體的業務。通過調用DataManager實現數據持久化。

Entity

實體的承載。這塊實體又做了很多接口和抽象。EntityManager和DataManager都依賴于它。

最后上總圖:

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Activiti源码 之 DataManager EntityManager的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。