SolonApp 的实例与接口
SolonApp 是框架的核心对象,也是应用生命周期的主体。一般通过 Solon.start(...) 产生,通过 Solon.app() 获取:
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();
启动并阻塞(一般用不到):
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 的路由,可以为 http, websocket, socket 通讯服务。也可以用于非通讯场景。
| 成员 | 说明 | 备注 | 
|---|---|---|
| filter(?) | 添加过滤器 | |
| routerInterceptor(?) | 添加路由拦截器 | v1.12.2 后支持 | 
| get(?) | 添加 get 处理 | |
| post(?) | 添加 post 处理 | |
| put(?) | 添加 put 处理 | |
| patch(?) | 添加 patch 处理 | |
| ... | 添加 ... 处理 | 方法处理有很多 | 
提示:可以通过 《请求处理过程示意图》,了解各接口的作用位置。
2、几个重要的成员
| 成员 | 说明 | 备注 | 
|---|---|---|
| 通过 Solon.app() 可获取当前实例 | ||
| context()->AppContext | 应用上下文(Bean 容器) | 通过 Solon.context() 可快捷获取 | 
| cfg()->SolonProps | 应用属性或配置 | 通过 Solon.cfg() 可快捷获取 | 
| classLoader() | 应用类加载器 | |
| source() | 应用启动源(或入口主类) | |
| shared() | 应用共享变量 | 会同步到一些插件(比如视图模板) | 
| sharedAdd(k,v) | 应用共享变量添加 | |
| sharedGet(k,callback) | 应用共享变量获取 | 支持订阅模式 | 
| router() | 应用路由器 | 一般不直接使用 | 
| 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 | 
例如:
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);
        });
    }
}
 Solon
 Solon