模块(Module)


创建自定义模块
  • 步骤一:根据业务需求创建需要对外暴露的业务接口

    public interface IDemoModule {
    
        // 为方便引用,定义模块名称常量
        String MODULE_NAME = "demomodule";
    
        // 返回自定义模块的参数配置接口对象
        IDemoModuleCfg getModuleCfg();
    
        // 对外暴露的业务方法
        String sayHi();
    }
  • 步骤二:处理自定义模块的配置参数,下列代码假定测试模块有两个自定义参数

    // 定义模块配置接口
    public interface IDemoModuleCfg {
    
        String getModuleParamOne();
    
        String getModuleParamTwo();
    }
    
    // 实现模块配置接口
    public class DemoModuleCfg implements IDemoModuleCfg {
    
        private String __moduleParamOne;
    
        private String __moduleParamTwo;
    
        public DemoModuleCfg(YMP owner) {
            // 从YMP框架中获取模块配置映射
            Map<String, String> _moduleCfgs = owner.getConfig().getModuleConfigs(IDemoModule.MODULE_NAME);
            //
            __moduleParamOne = _moduleCfgs.get("module_param_one");
            __moduleParamTwo = _moduleCfgs.get("module_param_two");
        }
    
        public String getModuleParamOne() {
            return __moduleParamOne;
        }
    
        public String getModuleParamTwo() {
            return __moduleParamTwo;
        }
    }
  • 步骤三:实现模块及业务接口

    :一定不要忘记在模块实现类上声明@Module注解,这样才能被YMP框架自动扫描、加载并初始化;

    @Module
    public class DemoModule implements IModule, IDemoModule {
    
        private YMP __owner;
    
        private IDemoModuleCfg __moduleCfg;
    
        private boolean __inited;
    
        public String getName() {
            return IDemoModule.MODULE_NAME;
        }
    
        public void init(YMP owner) throws Exception {
            if (!__inited) {
                __owner = owner;
                __moduleCfg = new DemoModuleCfg(owner);
                //
                __inited = true;
            }
        }
    
        public boolean isInited() {
            return __inited;
        }
    
        public YMP getOwner() {
            return __owner;
        }
    
        public IDemoModuleCfg getModuleCfg() {
            return __moduleCfg;
        }
    
        public void destroy() throws Exception {
            if (__inited) {
                __inited = false;
                //
                __moduleCfg = null;
                __owner = null;
            }
        }
    
        public String sayHi() {
            return "Hi, YMP!";
        }
    }
  • 步骤四:在YMP的配置文件ymp-conf.properties中添加模块的配置内容

    格式: ymp.configs.<模块名称>.<参数名称>=[参数值]

    ymp.configs.demomodule.module_param_one=module_param_one_value
    ymp.configs.demomodule.module_param_two=module_param_two_value
调用自定义模块
public static void main(String[] args) throws Exception {
    YMP.get().init();
    try {
        // 获取自定义模块实例对象
        IDemoModule _demoModule = YMP.get().getModule(IDemoModule.class);
        // 调用模块业务接口方法
        System.out.println(_demoModule.sayHi());
        // 调用模块配置信息
        System.out.println(_demoModule.getModuleCfg().getModuleParamOne());
    } finally {
        YMP.get().destroy();
    }
}

:自定义模块不支持IoC、AOP等特性;