package com.xxl.job.core.glue; import com.xxl.job.core.glue.impl.SpringGlueFactory; import com.xxl.job.core.handler.IJobHandler; import groovy.lang.GroovyClassLoader; /** * glue factory, product class/object by name * * @author xuxueli 2016-1-2 20:02:27 */ public class GlueFactory { private static GlueFactory glueFactory = new GlueFactory(); public static GlueFactory getInstance(){ return glueFactory; } public static void refreshInstance(int type){ if (type == 0) { glueFactory = new GlueFactory(); } else if (type == 1) { glueFactory = new SpringGlueFactory(); } } /** * groovy class loader */ private GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); /** * load new instance, prototype * * @param codeSource * @return * @throws Exception */ public IJobHandler loadNewInstance(String codeSource) throws Exception{ if (codeSource!=null && codeSource.trim().length()>0) { Class clazz = groovyClassLoader.parseClass(codeSource); if (clazz != null) { Object instance = clazz.newInstance(); if (instance!=null) { if (instance instanceof IJobHandler) { this.injectService(instance); return (IJobHandler) instance; } else { throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, " + "cannot convert from instance["+ instance.getClass() +"] to IJobHandler"); } } } } throw new IllegalArgumentException(">>>>>>>>>>> xxl-glue, loadNewInstance error, instance is null"); } /** * inject service of bean field * * @param instance */ public void injectService(Object instance) { // do something } }