# 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;
}
```