All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mars.timer.load.LoadMarsTimer Maven / Gradle / Ivy

There is a newer version: 3.3.3
Show newest version
package com.mars.timer.load;

import com.mars.core.annotation.MarsTimer;
import com.mars.core.constant.MarsConstant;
import com.mars.core.constant.MarsSpace;
import com.mars.core.model.MarsBeanClassModel;
import com.mars.core.model.MarsTimerModel;
import com.mars.core.load.LoadHelper;
import com.mars.ioc.factory.BeanFactory;

import java.lang.reflect.Method;
import java.util.List;

/**
 * 加载所有加了MarsTimer注解的bean
 */
public class LoadMarsTimer {

    /**
     * 获取全局存储空间
     */
    private static MarsSpace constants = MarsSpace.getEasySpace();

    /**
     * 加载所有加了MarsTimer注解的对象
     * @throws Exception
     */
    public static void loadMarsTimers() throws Exception {
        /* 获取所有的bean数据 */
        List marsBeansList = LoadHelper.getBeanList();

        List marsTimerObjects = LoadHelper.getMarsTimersList();

        for(MarsBeanClassModel marsBeanClassModel : marsBeansList) {
            Class cls = marsBeanClassModel.getClassName();
            String beanName = LoadHelper.getBeanName(marsBeanClassModel,cls);
            loadMethods(cls,marsTimerObjects,beanName);
        }
    }

    /**
     * 加载加了MarsTimer注解的方法,并保存
     * @param cls
     * @param marsTimerObjects
     */
    private static void loadMethods(Class cls, List marsTimerObjects,String beanName) throws Exception {
        Method[] methods = cls.getDeclaredMethods();
        for(Method method : methods){
            MarsTimer marsTimer = method.getAnnotation(MarsTimer.class);
            if(marsTimer != null){
                if(method.getParameterCount() > 0){
                    throw new Exception("有参数的方法不可以添加定时任务,方法名:"+cls.getName()+"."+ method.getName());
                }
                Object beanObject = BeanFactory.getBean(beanName,cls);

                MarsTimerModel marsTimerModel = new MarsTimerModel();
                marsTimerModel.setCls(cls);
                marsTimerModel.setMethodName(method.getName());
                marsTimerModel.setObj(beanObject);
                marsTimerModel.setMethod(method);
                marsTimerModel.setMarsTimer(marsTimer);
                marsTimerObjects.add(marsTimerModel);
            }
        }
        /* 保险起见,重新插入数据 */
        constants.setAttr(MarsConstant.MARS_TIMER_OBJECTS, marsTimerObjects);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy