Skip to content

Latest commit

 

History

History
116 lines (92 loc) · 2.31 KB

4.config.md

File metadata and controls

116 lines (92 loc) · 2.31 KB

配置设计

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!

links