|
@@ -0,0 +1,80 @@
|
|
|
+package com.xxl.job.core.glue.impl;
|
|
|
+
|
|
|
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
|
|
|
+import com.xxl.job.core.glue.GlueFactory;
|
|
|
+import jakarta.annotation.Resource;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.core.annotation.AnnotationUtils;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.lang.reflect.Modifier;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author xuxueli 2018-11-01
|
|
|
+ */
|
|
|
+public class SpringGlueFactory extends GlueFactory {
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(SpringGlueFactory.class);
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * inject action of spring
|
|
|
+ * @param instance
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void injectService(Object instance){
|
|
|
+ if (instance==null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (XxlJobSpringExecutor.getApplicationContext() == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Field[] fields = instance.getClass().getDeclaredFields();
|
|
|
+ for (Field field : fields) {
|
|
|
+ if (Modifier.isStatic(field.getModifiers())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ Object fieldBean = null;
|
|
|
+ // with bean-id, bean could be found by both @Resource and @Autowired, or bean could only be found by @Autowired
|
|
|
+
|
|
|
+ if (AnnotationUtils.getAnnotation(field, Resource.class) != null) {
|
|
|
+ try {
|
|
|
+ Resource resource = AnnotationUtils.getAnnotation(field, Resource.class);
|
|
|
+ if (resource.name()!=null && resource.name().length()>0){
|
|
|
+ fieldBean = XxlJobSpringExecutor.getApplicationContext().getBean(resource.name());
|
|
|
+ } else {
|
|
|
+ fieldBean = XxlJobSpringExecutor.getApplicationContext().getBean(field.getName());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ if (fieldBean==null ) {
|
|
|
+ fieldBean = XxlJobSpringExecutor.getApplicationContext().getBean(field.getType());
|
|
|
+ }
|
|
|
+ } else if (AnnotationUtils.getAnnotation(field, Autowired.class) != null) {
|
|
|
+ Qualifier qualifier = AnnotationUtils.getAnnotation(field, Qualifier.class);
|
|
|
+ if (qualifier!=null && qualifier.value()!=null && qualifier.value().length()>0) {
|
|
|
+ fieldBean = XxlJobSpringExecutor.getApplicationContext().getBean(qualifier.value());
|
|
|
+ } else {
|
|
|
+ fieldBean = XxlJobSpringExecutor.getApplicationContext().getBean(field.getType());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (fieldBean!=null) {
|
|
|
+ field.setAccessible(true);
|
|
|
+ try {
|
|
|
+ field.set(instance, fieldBean);
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
+ } catch (IllegalAccessException e) {
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|