@Override protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super.createJobInstance(bundle); if (job instanceof MethodInvokingJobDetailFactoryBean.MethodInvokingJob) { JobDetail jobDetail = bundle.getJobDetail(); String jobBeanName = (String) jobDetail.getJobDataMap().get(QuartzUtils.JOB_BEAN_NAME_PARAMETER); String jobMethodName = (String) jobDetail.getJobDataMap().get( QuartzUtils.JOB_BEAN_METHOD_NAME_PARAMETER); if (!StringUtils.isBlank(jobBeanName) && !StringUtils.isBlank(jobMethodName)) { Object jobBean = applicationContext.getBean(jobBeanName); LOG.debug("Create {} for job {} with bean name {} and method name {}.", MethodInvoker.class, jobDetail.getKey().getName(), jobBeanName, jobMethodName); MethodInvoker methodInvoker = new MethodInvoker(); methodInvoker.setTargetObject(jobBean); methodInvoker.setTargetMethod(jobMethodName); methodInvoker.prepare(); ((MethodInvokingJobDetailFactoryBean.MethodInvokingJob) job).setMethodInvoker(methodInvoker); } } return job; } }
private void setTargetObject(Job job, TriggerFiredBundle bundle, boolean forceCreateObject) throws Exception { PojoJobMeta pojoJobMeta = getPojoJobMeta(bundle.getJobDetail()); if (pojoJobMeta == null) return; if (pojoJobMeta.getTargetObject() != null && !forceCreateObject) return; Object targetObject; Class targetClass = pojoJobMeta.getTargetClass(); try { targetObject = beanFactory.getBean(targetClass); } catch (NoSuchBeanDefinitionException e) { targetObject = targetClass.newInstance(); beanFactory.autowireBean(targetObject); } populateJobDataMapTargetObject(bundle, targetObject); pojoJobMeta.setTargetObject(targetObject); MethodInvokingJobDetailFactoryBean methodInvoker = createMethodInvoker(pojoJobMeta); methodInvoker.setTargetObject(targetObject); MethodInvokingJob methodInvokingJob = (MethodInvokingJob) job; methodInvokingJob.setMethodInvoker(methodInvoker); }