SolonApp 是框架的核心对象，也是应用生命周期的主体。一般通过 Solon.start(...) 产生，通过 Solon.app() 获取：

```java
import org.noear.solon.Solon;
import org.noear.solon.SolonApp;
import org.noear.solon.annotation.SolonMain;

@SolonMain
public class DemoApp{
    public static void main(String[] args){
        //可以在 start() 返回得到它
        SolonApp app = Solon.start(DemoApp.class, args, app->{
          //或者，可以通初始化函数获得它
        });
    }
}

//最重要的是：start() 后，通过全局实例得到它（为手动开发提供便利）：
Solon.app();
```

启动并阻塞（一般用不到）：

```java
import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;

@SolonMain
public class DemoApp{
    public static void main(String[] args){
        Solon.start(DemoApp.class, args).block();
    }
}
```


提醒：原则上 Solon.start(..) 在一个程序里，只能执行一次。

### 1、了解路由接口（为手动控制提供支持）

Solon Router 的路由，可以为 http, websocket, socket 通讯服务。也可以用于非通讯场景。

| 成员 | 说明 | 备注 |
| -------- | -------- | -------- |
|   filter(?)   |  添加过滤器     |      |
|   routerInterceptor(?)   |  添加路由拦截器    |  v1.12.2 后支持    |
|      |      |      |
|   get(?)   |   添加 get 处理   |      |
|   post(?)   |   添加 post 处理   |      |
|   put(?)   |   添加 put 处理   |      |
|   patch(?)   | 添加 patch 处理     |      |
|   ...   |   添加 ... 处理   |   方法处理有很多   |


提示：可以通过 [《请求处理过程示意图》](/article/242)，了解各接口的作用位置。



```java
import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;

@SolonMain
public class DemoApp{
    public static void main(String[] args){
        Solon.start(DemoApp.class, args, app->{
            app.router().get("/hello", ctx->{
                ctx.output("hello world!");
            });
        });
    }
}
```

### 2、几个重要的成员



| 成员 | 说明 | 备注 |
| -------- | -------- | -------- |
|      |      |   通过 Solon.app() 可获取当前实例  |
| `context()->AppContext`     | 应用上下文（Bean 容器）     |   通过 Solon.context() 可快捷获取  |
| `cfg()->SolonProps`     | 应用属性或配置     |  通过 Solon.cfg() 可快捷获取   |
|      |      |      |
| `classLoader()`     | 应用类加载器     |      |
| `source()`     | 应用启动源（或入口主类）     |      |
|      |      |      |
| `shared()`     | 应用共享变量     |   会同步到一些插件（比如视图模板）   |
| `sharedAdd(k,v)`     | 应用共享变量添加     |      |
| `sharedGet(k,callback)`     | 应用共享变量获取     |   支持订阅模式   |
|      |      |      |
| `router()`  | 应用路由器 | web 处理的中心接口  |
|      |      |      |
| `chains()` 或 `chainManager()`  | 应用链路管理器 | 一般不直接使用 |
| `converters()` 或 `converterManager()`  | 应用转换管理器 | 一般不直接使用 |
| `serializers()` 或 `serializerManager()`  | 应用序列化管理器 | 一般不直接使用 |
| `renders()` 或 `renderManager()`  | 应用渲染管理器 | 一般不直接使用 |
| `factories()` 或 `factoryManager()`  | 应用工厂管理器 | 一般不直接使用 |

### 3、几个重要的开关


| 成员 | 说明 | 默值值 |
| ----------------- | ------------------ | -------- |
| enableHttp(?)              | 启用http通讯                   |  true    |
| enableWebSocket(?)     | 启用web socket通讯         |  false    |
| enableSocketD(?)          | 启用socket通讯的D协议     |  false    |
|      |      |      |
| enableTransaction(?)        | 启用事务能力          |   true   |
| enableCaching(?)            | 启用缓存能力            |   true   |
| enableStaticfiles(?)          | 启用静态文件能力     |  true   |
| enableSessionState(?)     | 启用会话状态能力     |  true    |


例如：

```java
import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;

@SolonMain
public class DemoApp{
    public static void main(String[] args){
        Solon.start(DemoApp.class, args, app->{
          app.enableSessionState(false);
        });
    }
}
```
