package tech.powerjob.worker.processor.impl; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import tech.powerjob.common.enums.ProcessorType; import tech.powerjob.worker.core.processor.sdk.BasicProcessor; import tech.powerjob.worker.extension.processor.ProcessorBean; import tech.powerjob.worker.extension.processor.ProcessorDefinition; import tech.powerjob.worker.extension.processor.ProcessorFactory; import java.util.Set; /** * 内建的 SpringBean 处理器工厂,用于加载 Spring 相关的Bean,非核心依赖 * * @author tjq * @since 2023/1/17 */ @Slf4j public class BuiltInSpringProcessorFactory extends AbstractBuildInSpringProcessorFactory { public BuiltInSpringProcessorFactory(ApplicationContext applicationContext) { super(applicationContext); } @Override public ProcessorBean build(ProcessorDefinition processorDefinition) { try { boolean canLoad = checkCanLoad(); if (!canLoad) { log.info("[ProcessorFactory] can't find Spring env, this processor can't load by 'BuiltInSpringProcessorFactory'"); return null; } String processorInfo = processorDefinition.getProcessorInfo(); //用于区分方法级别的参数 if (processorInfo.contains("#")) { return null; } BasicProcessor basicProcessor = getBean(processorInfo, applicationContext); return new ProcessorBean() .setProcessor(basicProcessor) .setClassLoader(basicProcessor.getClass().getClassLoader()); } catch (NoSuchBeanDefinitionException ignore) { log.warn("[ProcessorFactory] can't find the processor in SPRING"); } catch (Throwable t) { log.warn("[ProcessorFactory] load by BuiltInSpringProcessorFactory failed. If you are using Spring, make sure this bean was managed by Spring", t); } return null; } }