taskBeanMap.keySet().forEach(beanName -> { Object bean = taskBeanMap.get(beanName); Class clazz = bean.getClass(); if (bean instanceof AbstractTaskHandler && clazz.getAnnotation(TaskHandler.class) != null) { TaskHandler taskHandler = (TaskHandler) clazz.getAnnotation(TaskHandler.class); String taskType = taskHandler.taskType(); if (TASK_HANDLERS_MAP.keySet().contains(taskType)) { throw new RuntimeException("TaskType has Exits. TaskType=" + taskType); } TASK_HANDLERS_MAP.put(taskHandler.taskType(), (AbstractTaskHandler) taskBeanMap.get(beanName)); LOGGER.info("Task Handler Register. taskType={},beanName={}", taskHandler.taskType(), beanName); } }); } public static AbstractTaskHandler getTaskHandler(String taskType) { return TASK_HANDLERS_MAP.get(taskType); } } 这里持续了Spring的ApplicationObjectSupport类,具体的注册过程如下
- Spring完成bean的初始化
- 查找spring的容器中,所有带有TaskHandler注解的bean
- 校验bean是否为AbstractTaskHandler类型,获取到taskType
- 把该bean放到TASK_HANDLERS_MAP容器中,即注册完成
义务履行
接下来我们来看下义务履行
- public class TaskExecutor implements Job {
-
- private static final String TASK_TYPE = "taskType";
-
- @Override
- public BaseResult execute(Task task){
- String taskType=task.getTaskType();
- if (TaskHandlerRegister.getTaskHandler(taskType) == null) {
- throw new RuntimeException("can't find taskHandler,taskType=" + taskType);
- }
-
推荐阅读
互联网法院:司法与互联网的“无缝对接”
如今,人们的临盆生活早已经离不开互联网,它在带来便利的同时也激发大年夜量的新型涉网胶葛。特别是,因为互联网自身固有的跨地区、去中间化、在线化特点,新型涉网胶葛对现行司法理论、>>>详细阅读
本文标题:使用Spring自定义注解实现任务路由
地址:http://www.17bianji.com/lsqh/36542.html
1/2 1