# 配置設計
Mario中所有的配置都可以在 `Mario` 全局唯一對象完成,將它設計為單例。
要運行起來整個框架,Mario對象是核心,看看里面都需要什么吧!
- 添加路由
- 讀取資源文件
- 讀取配置
- 等等
由此我們簡單的設計一個Mario全局對象:
```java
/**
* 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實例,我們用它來操作所有配置即可。
### 在`Boostrap`的`init`方法中使用
```java
@Override
public void init(Mario mario) {
Index index = new Index();
mario.addRoute("/", "index", index);
mario.addRoute("/html", "html", index);
}
```
這樣,一個簡單的MVC后端已經形成了!接下來我們要將結果展現在JSP文件中,要做視圖的渲染設計 LET'S GO!