diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index 52818c55e..e93a3f33d 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -8,6 +8,7 @@ */ package com.yomahub.liteflow.flow; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -102,9 +103,13 @@ public class FlowBus { try { //以node方式配置,本质上是为了适配无spring的环境,如果有spring环境,其实不用这么配置 //这里的逻辑是判断是否能从spring上下文中取到,如果没有spring,则就是new instance了 - NodeComponent cmpInstance = SpringAware.registerOrGet(cmpClazz); + //如果是script类型的节点,因为class只有一个,所以也不能注册进spring上下文,注册的时候需要new Instance + NodeComponent cmpInstance = null; + if (!CollectionUtil.newArrayList(NodeTypeEnum.SCRIPT, NodeTypeEnum.COND_SCRIPT).contains(type)){ + cmpInstance = SpringAware.registerOrGet(nodeId, cmpClazz); + } + if (ObjectUtil.isNull(cmpInstance)) { - LOG.warn("couldn't find component class [{}] from spring context", cmpClazz.getName()); cmpInstance = cmpClazz.newInstance(); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java index 65dca6221..911df22cb 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.util; +import cn.hutool.core.util.ObjectUtil; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinition; @@ -45,22 +46,25 @@ public class SpringAware implements ApplicationContextAware { } } - public static T registerBean(Class c) { + public static T registerBean(String beanName, Class c) { DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory(); BeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClassName(c.getName()); - beanFactory.registerBeanDefinition(c.getName(), beanDefinition); - return getBean(c.getName()); + beanFactory.registerBeanDefinition(beanName, beanDefinition); + return getBean(beanName); } - public static T registerOrGet(Class clazz) { - T t = null; - try { - t = SpringAware.getBean(clazz); - } catch (NoSuchBeanDefinitionException e) { - if (t == null) { - t = SpringAware.registerBean(clazz); - } + public static T registerBean(Class c) { + return registerBean(c.getName(), c); + } + + public static T registerOrGet(String beanName, Class clazz) { + if (ObjectUtil.isNull(applicationContext)){ + return null; + } + T t = SpringAware.getBean(clazz); + if (ObjectUtil.isNull(t)) { + t = SpringAware.registerBean(beanName, clazz); } return t; }