1. 启动与Spring实例化
com.xxl.job.core.executor.impl.XxlJobSpringExecutor.java类
继承SmartInitializingSingleton 类,在afterSingletonsInstantiated 实例化后方法中
调用initJobHandlerMethodRepository 把所有的xxljob任务管理起来;
private void initJobHandlerMethodRepository(ApplicationContext applicationContext) {
if (applicationContext == null) {
return;
}
// init job handler from method
//扫描所有的bean,并获取XxlJob的注解,registJobHandler加入到 一个 map 中
// 见jobHandlerRepository
String[] beanDefinitionNames = applicationContext.getBeanNamesForType(Object.class, false, true);
for (String beanDefinitionName : beanDefinitionNames) {
Object bean = applicationContext.getBean(beanDefinitionName);
Map<Method, XxlJob> annotatedMethods = null; // referred to :org.springframework.context.event.EventListenerMethodProcessor.processBean
try {
annotatedMethods = MethodIntrospector.selectMethods(bean.getClass(),
new MethodIntrospector.MetadataLookup<XxlJob>() {
@Override
public XxlJob inspect(Method method) {
return AnnotatedElementUtils.findMergedAnnotation(method, XxlJob.class);
}
});
} catch (Throwable ex) {
logger.error("xxl-job method-jobhandler resolve erro