|  | @@ -78,59 +78,62 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // init job handler from method
 | 
	
		
			
				|  |  |          String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
 | 
	
		
			
				|  |  | -        for (String beanDefinitionName : beanDefinitionNames) {
 | 
	
		
			
				|  |  | -            Object bean = applicationContext.getBean(beanDefinitionName);
 | 
	
		
			
				|  |  | -            Method[] methods = bean.getClass().getDeclaredMethods();
 | 
	
		
			
				|  |  | -            for (Method method: methods) {
 | 
	
		
			
				|  |  | -                XxlJob xxlJob = AnnotationUtils.findAnnotation(method, XxlJob.class);
 | 
	
		
			
				|  |  | -                if (xxlJob != null) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    // name
 | 
	
		
			
				|  |  | -                    String name = xxlJob.value();
 | 
	
		
			
				|  |  | -                    if (name.trim().length() == 0) {
 | 
	
		
			
				|  |  | -                        throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (loadJobHandler(name) != null) {
 | 
	
		
			
				|  |  | -                        throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +        if (beanDefinitionNames!=null && beanDefinitionNames.length>0) {
 | 
	
		
			
				|  |  | +            for (String beanDefinitionName : beanDefinitionNames) {
 | 
	
		
			
				|  |  | +                Object bean = applicationContext.getBean(beanDefinitionName);
 | 
	
		
			
				|  |  | +                Method[] methods = bean.getClass().getDeclaredMethods();
 | 
	
		
			
				|  |  | +                for (Method method: methods) {
 | 
	
		
			
				|  |  | +                    XxlJob xxlJob = AnnotationUtils.findAnnotation(method, XxlJob.class);
 | 
	
		
			
				|  |  | +                    if (xxlJob != null) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        // name
 | 
	
		
			
				|  |  | +                        String name = xxlJob.value();
 | 
	
		
			
				|  |  | +                        if (name.trim().length() == 0) {
 | 
	
		
			
				|  |  | +                            throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        if (loadJobHandler(name) != null) {
 | 
	
		
			
				|  |  | +                            throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    // execute method
 | 
	
		
			
				|  |  | -                    if (!(method.getParameterTypes()!=null && method.getParameterTypes().length==1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
 | 
	
		
			
				|  |  | -                        throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
 | 
	
		
			
				|  |  | -                                "The correct method format like \" public ReturnT<String> execute(String param) \" .");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
 | 
	
		
			
				|  |  | -                        throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
 | 
	
		
			
				|  |  | -                                "The correct method format like \" public ReturnT<String> execute(String param) \" .");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    method.setAccessible(true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    // init and destory
 | 
	
		
			
				|  |  | -                    Method initMethod = null;
 | 
	
		
			
				|  |  | -                    Method destroyMethod = null;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if(xxlJob.init().trim().length() > 0) {
 | 
	
		
			
				|  |  | -                        try {
 | 
	
		
			
				|  |  | -                            initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
 | 
	
		
			
				|  |  | -                            initMethod.setAccessible(true);
 | 
	
		
			
				|  |  | -                        } catch (NoSuchMethodException e) {
 | 
	
		
			
				|  |  | -                            throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | +                        // execute method
 | 
	
		
			
				|  |  | +                        if (!(method.getParameterTypes()!=null && method.getParameterTypes().length==1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
 | 
	
		
			
				|  |  | +                            throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
 | 
	
		
			
				|  |  | +                                    "The correct method format like \" public ReturnT<String> execute(String param) \" .");
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if(xxlJob.destroy().trim().length() > 0) {
 | 
	
		
			
				|  |  | -                        try {
 | 
	
		
			
				|  |  | -                            destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
 | 
	
		
			
				|  |  | -                            destroyMethod.setAccessible(true);
 | 
	
		
			
				|  |  | -                        } catch (NoSuchMethodException e) {
 | 
	
		
			
				|  |  | -                            throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | +                        if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
 | 
	
		
			
				|  |  | +                            throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
 | 
	
		
			
				|  |  | +                                    "The correct method format like \" public ReturnT<String> execute(String param) \" .");
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        method.setAccessible(true);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        // init and destory
 | 
	
		
			
				|  |  | +                        Method initMethod = null;
 | 
	
		
			
				|  |  | +                        Method destroyMethod = null;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if(xxlJob.init().trim().length() > 0) {
 | 
	
		
			
				|  |  | +                            try {
 | 
	
		
			
				|  |  | +                                initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
 | 
	
		
			
				|  |  | +                                initMethod.setAccessible(true);
 | 
	
		
			
				|  |  | +                            } catch (NoSuchMethodException e) {
 | 
	
		
			
				|  |  | +                                throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        if(xxlJob.destroy().trim().length() > 0) {
 | 
	
		
			
				|  |  | +                            try {
 | 
	
		
			
				|  |  | +                                destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
 | 
	
		
			
				|  |  | +                                destroyMethod.setAccessible(true);
 | 
	
		
			
				|  |  | +                            } catch (NoSuchMethodException e) {
 | 
	
		
			
				|  |  | +                                throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    // registry jobhandler
 | 
	
		
			
				|  |  | -                    registJobHandler(name, new MethodJobHandler(bean, method, initMethod, destroyMethod));
 | 
	
		
			
				|  |  | +                        // registry jobhandler
 | 
	
		
			
				|  |  | +                        registJobHandler(name, new MethodJobHandler(bean, method, initMethod, destroyMethod));
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // ---------------------- applicationContext ----------------------
 |