Activiti源码 之 DataManager EntityManager
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序登录流程解析
- 下一篇: Activiti源码之建造者模式 Bui