# TurboWeb-SpringBoot **Repository Path**: turboweb/turboweb-springboot ## Basic Information - **Project Name**: TurboWeb-SpringBoot - **Description**: TurboWeb与SpringBoot的整合包 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-07-29 - **Last Updated**: 2025-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

## 快速开始 ### 引入相关依赖 首先创建一个SpringBoot工程,并在项目的`pom.xml`中引入TurboWeb的起步依赖。该依赖将自动集成TurboWeb的核心功能,并支持与SpringBoot的无缝整合。 ```xml io.gitee.turboweb turboweb-spring-boot-starter 2.1.1 ``` > **说明**:通过该起步依赖,开发者无需手动配置TurboWeb的服务启动、路由管理器、中间件等核心组件,SpringBoot容器会自动装配并管理。 ### 编写一个Controller接口 TurboWeb整合SpringBoot之后,控制器的使用非常类似于Spring MVC,只需在类上添加 `@TurboController` 注解即可被框架自动扫描并注册。 ```java package top.heimi.controller; import top.turboweb.boot.anno.TurboController; import top.turboweb.commons.anno.Get; import top.turboweb.commons.anno.RequestPath; @TurboController @RequestPath public class HelloController { @Get public String hello() { return "hello world"; } } ``` 启动SpringBoot应用后,通过浏览器访问对应的URL即可看到 `"hello world"` 输出。 > **说明**: > > - `@TurboController`:标识控制器类,将其纳入TurboWeb路由管理。 > - `@RequestPath`:用于定义路由前缀,可省略,默认为类路径名。 > - `@Get`:声明HTTP GET请求方法。 ## TurboWeb的配置项 TurboWeb整合SpringBoot后,绝大部分配置项保持一致,同时新增了针对SpringBoot的配置项,开发者可以通过`application.yaml`或`application.properties`进行统一配置。 例如禁用请求日志: ```yaml turboweb: show-request-log: false ``` 新增的配置项包括: ``` turboweb: host: 0.0.0.0 # 服务器绑定的IP地址 port: 8080 # 服务器监听端口 io-thread: 1 # Netty IO线程数,默认单线程足以处理高并发请求 anno-param-auto-bind: true # 当使用声明式路由时,是否自动将请求参数绑定到方法参数 ``` > **说明**: > > - `host` 和 `port` 配置直接影响服务启动的监听接口。 > - `io-thread` 仅影响IO事件的分发线程,TurboWeb默认采用轻量IO模型,单线程即可高效处理事件分发。 > - `anno-param-auto-bind` 可减少手动提取请求参数的步骤,提高开发效率。 ## TurboWeb的路由管理器 整合SpringBoot后,TurboWeb默认采用声明式路由管理器,开发者无需手动注册控制器,框架会自动扫描带有 `@TurboController` 注解的类并注册到路由表中。 ```java @TurboController @RequestPath public class HelloController { @Get public String hello() { return "hello world"; } } ``` ### 替换路由管理器 如果需要自定义路由策略,可以替换默认的路由管理器为 `LambdaRouterManager`: ```java @Bean public SpringLambdaRouterManager springLambdaRouterManager(ApplicationContext applicationContext) { return new SpringLambdaRouterManager(applicationContext); } ``` 使用 `LambdaRouterManager` 时: - 控制器不再强制需要 `@TurboController` 注解。 - 只要 `LambdaRouterGroup` 被SpringBoot扫描到,即可自动注册路由。 ```java @Component public class HelloController extends LambdaRouterGroup { @Override protected void registerRoute(RouterRegister routerRegister) { routerRegister.get(ctx -> "Hello World"); } } ``` ## 自动配置类 TurboWeb提供了自动配置类,允许开发者通过继承 `TurboWebConfiguration` 自定义服务器行为。 ```java @Configuration public class WebConfig extends TurboWebConfiguration { } ``` > **说明**:继承 `TurboWebConfiguration` 后,可通过覆盖内部方法进行中间件注册、拦截器、跨域设置、监听器等操作。 ### 注册中间件 中间件在TurboWeb中用于处理请求链的前置或后置逻辑。注册顺序与调用顺序一致: ```java @Override protected void registerMiddleware(MiddlewareContainer container) { container.register(new Middleware() { @Override public Object invoke(HttpContext httpContext) { System.out.println("Middleware"); return next(httpContext); } }); } ``` ### 拦截器 默认情况下,TurboWeb拦截器是关闭的,需手动开启: ```java @Override protected boolean openInterceptorManager() { return true; } ``` 注册拦截器示例: ```java @Override protected void registerInterceptor(InterceptorManager manager) { manager.addInterceptionHandler("/**", new InterceptorHandler() { @Override public boolean preHandler(HttpContext ctx) { System.out.println("Interceptor Pre"); return true; } @Override public Object postHandler(HttpContext ctx, Object result) { System.out.println("Interceptor Post"); return result; } @Override public void afterCompletion(Throwable exception) { System.out.println("Interceptor Com"); } @Override public int order() { return 0; } }); } ``` ### 跨域设置 通过覆盖 `cors` 方法配置CORS策略: ````java @Override public void cors(CorsProcessor.Config config) { config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE")); } ```` ### 添加监听器 监听器用于在服务器生命周期的关键节点执行自定义逻辑: ```java @Override protected void registerListener(ListenerContainer container) { container.addListener(new TurboWebListener() { @Override public void beforeServerInit() { System.out.println("Listener beforeServerInit"); } @Override public void afterServerStart() { System.out.println("Listener afterServerStart"); } }); } ``` ### 添加Netty处理器 通过覆盖 `registerNettyHandler` 方法,可在TurboWeb内部处理链的前后增加自定义Netty处理器: ```java @Override protected void registerNettyHandler(NettyHandlerContainer container) { // 在TurboWeb核心处理器之前添加自定义逻辑 container.addHandlerBeforeTurboWeb(...); // 在TurboWeb核心处理器之后添加自定义逻辑 container.addHandlerAfterTurboWeb(...); } ``` ## 异常处理器 整合SpringBoot后,TurboWeb异常处理器可通过注解自动装配,无需手动注册: ```java @TurboExceptionHandler public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public String doException(Exception e) { return "error"; } } ``` > **说明**: > > - `@TurboExceptionHandler`:标识全局异常处理类。 > - `@ExceptionHandler`:指定异常类型和处理逻辑,可返回自定义响应或视图。 ## WebSocket 在原生TurboWeb WebSocket基础上,通过添加 `@TurboWebSocket` 注解即可被SpringBoot自动装配: ```java @TurboWebSocket public class MyWebSocketHandler extends AbstractWebSocketHandler { @Override public void onText(WebSocketSession webSocketSession, String s) { System.out.println("接收到文本消息:" + s); } @Override public void onBinary(WebSocketSession webSocketSession, ByteBuf byteBuf) { System.out.println("接收到二进制消息:" + byteBuf); } } ``` ## 嵌入式网关 TurboWeb可直接作为SpringBoot Bean注册网关服务,实现简单的服务路由和代理: ```java @Bean public Gateway gateway() { Gateway gateway = new DefaultGateway(); gateway.addServerNode("/order", "http://localhost:8081"); return gateway; } ```