留个纪念:可初始化的 Initializable 发表于 2022-04-28 | 分类于 ---Java | 1234567891011121314151617181920212223242526272829303132333435363738package com.amoros.hawkeye.service.send;import java.util.concurrent.atomic.AtomicBoolean;/** * 可初始化的 * * @author 陶攀峰 * @date 2022-04-28 06:00 */public interface Initializable { /** * 是否完成初始化 */ AtomicBoolean FINISHED = new AtomicBoolean(); /** * 进行一些初始化的工作 */ default void init() { // 已初始化 if (FINISHED.get()) { return; } // 未初始化 if (FINISHED.compareAndSet(false, true)) { doInit(); } } /** * 做初始化工作 */ void doInit();} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061package com.amoros.hawkeye.service.send;import cn.hutool.extra.spring.SpringUtil;import com.amoros.hawkeye.enums.ActionRelType;import com.amoros.hawkeye.generator.domain.ActionRelDetail;import com.amoros.hawkeye.generator.domain.TenantActionRel;import com.amoros.hawkeye.generator.domain.custom.RelDetailIds;import com.amoros.hawkeye.generator.service.ActionRelDetailService;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.util.List;import java.util.Map;import java.util.function.Function;import java.util.stream.Collectors;/** * 发送服务 * * @author 陶攀峰 * @date 2022-04-11 18:19 */@Slf4j@Componentpublic class SendService implements InitializingBean { @Autowired private static ActionRelDetailService actionRelDetailService; private static Map<ActionRelType, HandlerAdapter> handlerAdapterMap; /** * 成员变量初始化 => 从 BeanFactory 中获取 */ @Override public void afterPropertiesSet() throws Exception { handlerAdapterMap = SpringUtil.getBeansOfType(HandlerAdapter.class).values().stream() .collect(Collectors.toMap(HandlerAdapter::getType, Function.identity())); } /** * 发送:在 Drools 中调用 */ public static void send(TenantActionRel tenantActionRel) { // 查询关联详情列表:消息、任务、... List<Long> relDetailIds = RelDetailIds.list(tenantActionRel.getRelDetailIds()); List<ActionRelDetail> actionRelDetailList = actionRelDetailService.list(Wrappers.lambdaQuery(ActionRelDetail.class) .in(ActionRelDetail::getId, relDetailIds) ); // 依次处理 for (ActionRelDetail actionRelDetail : actionRelDetailList) { HandlerAdapter handlerAdapter = handlerAdapterMap.get(actionRelDetail.getActionRelType()); handlerAdapter.handler(tenantActionRel, actionRelDetail); } }}