配置设计

Mario中所有的配置都可以在 Mario 全局唯一对象完成,将它设计为单例。

要运行起来整个框架,Mario对象是核心,看看里面都需要什么吧!

  • 添加路由
  • 读取资源文件
  • 读取配置
  • 等等

由此我们简单的设计一个Mario全局对象:

/**
 * Mario
 * @author biezhi
 *
 */
public final class Mario {

    /**
     * 存放所有路由
     */
    private Routers routers;

    /**
     * 配置加载器
     */
    private ConfigLoader configLoader;

    /**
     * 框架是否已经初始化
     */
    private boolean init = false;

    private Mario() {
        routers = new Routers();
        configLoader = new ConfigLoader();
    }

    public boolean isInit() {
        return init;
    }

    public void setInit(boolean init) {
        this.init = init;
    }

    private static class MarioHolder {
        private static Mario ME = new Mario();
    }

    public static Mario me(){
        return MarioHolder.ME;
    }

    public Mario addConf(String conf){
        configLoader.load(conf);
        return this;
    }

    public String getConf(String name){
        return configLoader.getConf(name);
    }

    public Mario addRoutes(Routers routers){
        this.routers.addRoute(routers.getRoutes());
        return this;
    }

    public Routers getRouters() {
        return routers;
    }

    /**
     * 添加路由
     * @param path            映射的PATH
     * @param methodName    方法名称
     * @param controller    控制器对象
     * @return                返回Mario
     */
    public Mario addRoute(String path, String methodName, Object controller){
        try {
            Method method = controller.getClass().getMethod(methodName, Request.class, Response.class);
            this.routers.addRoute(path, method, controller);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        return this;
    }

}

这样在系统中永远保持一个Mario实例,我们用它来操作所有配置即可。

Boostrapinit方法中使用

@Override
public void init(Mario mario) {
    Index index = new Index();
    mario.addRoute("/", "index", index);
    mario.addRoute("/html", "html", index);
}

这样,一个简单的MVC后端已经形成了!接下来我们要将结果展现在JSP文件中,要做视图的渲染设计 LET'S GO!

results matching ""

    No results matching ""