添加 Controller
手动添加 Controller
在 tio-boot 框架中,启动类上使用 @AComponentScan
注解,Controller 类上使用 @RequestPath
注解。被 @AComponentScan
标记的启动类会自动扫描并初始化所有被 @RequestPath
标记的 Controller 类。
然而,在某些情况下,为了提升性能,可能不使用 @AComponentScan
。此时,可以通过手动添加 Controller 的方式来实现。
示例代码
以下是手动添加 Controller 的示例代码:
TioBootHttpControllerRouter controllerRouter = TioBootServer.me().getControllerRouter();
ControllerFactory aopFactory = new AopControllerFactory();
controllerRouter.addControllers(scannedClasses, aopFactory);
完整实例
启动类
package com;
import com.config.DubboProviderConfig;
import com.litongjava.tio.boot.TioApplication;
import lombok.extern.slf4j.Slf4j;
// @AComponentScan
public class DubboProviderApplication {
public static void main(String[] args) {
long start = System.currentTimeMillis();
TioApplication.run(DubboProviderApplication.class, new DubboProviderConfig(), args);
long end = System.currentTimeMillis();
System.out.println("启动耗时: " + (end - start) + " 毫秒");
}
}
注意:此处注释掉了
@AComponentScan
,表示不使用自动扫描功能,需手动添加 Controller。
配置类
package com.config;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.litongjava.context.BootConfiguration;
import com.litongjava.controller.ControllerFactory;
import com.litongjava.tio.boot.http.handler.AopControllerFactory;
import com.litongjava.tio.boot.http.router.TioBootHttpControllerRouter;
import com.litongjava.tio.boot.server.TioBootServer;
public class DubboProviderConfig implements BootConfiguration {
@Override
public void config() throws IOException {
// 创建一个包含所有需要手动添加的 Controller 类的列表
List<Class<?>> scannedClasses = new ArrayList<>();
scannedClasses.add(com.controller.HealthController.class);
scannedClasses.add(com.controller.SpringController.class);
scannedClasses.add(DataContentHandler.class);
scannedClasses.add(TestController.class);
scannedClasses.add(LrbServiceController.class);
// 获取 Controller 路由器实例
TioBootHttpControllerRouter controllerRouter = TioBootServer.me().getControllerRouter();
// 创建 AOP 工厂实例
ControllerFactory aopFactory = new AopControllerFactory();
// 手动添加 Controller
controllerRouter.addControllers(scannedClasses, aopFactory);
}
}
Controller 类示例
package com.controller;
@RequestPath("/health")
public class HealthController {
public RespBodyVo status() {
Kv kv = Kv.by("online", DataResult.salesmanUserMap);
return RespBodyVo.ok(kv);
}
}
详细说明
启动类 (
DubboProviderApplication
):- 负责启动应用程序。
- 使用
TioApplication.run
方法启动 tio-boot 框架,并传入配置类DubboProviderConfig
。 - 记录启动耗时,便于性能监控。
配置类 (
DubboProviderConfig
):- 实现
BootConfiguration
接口,负责框架的配置。 - 在
config
方法中,手动添加需要的 Controller 类到scannedClasses
列表中。 - 获取
TioBootHttpControllerRouter
实例,用于管理 Controller 路由。 - 创建
AopControllerFactory
实例,实现 AOP 功能。 - 调用
addControllers
方法,将 Controller 类列表和 AOP 工厂添加到路由器中。
- 实现
Controller 类 (
HealthController
):- 使用
@RequestPath
注解定义路由路径/health
。 - 定义
status
方法,返回当前服务的健康状态。
- 使用
总结
在 tio-boot 框架中,虽然 @AComponentScan
提供了便捷的自动扫描和初始化 Controller 的功能,但在追求高性能的场景下,手动添加 Controller 可以减少不必要的扫描开销。通过手动管理 Controller 类列表,并结合 AOP 工厂,可以实现高效且灵活的 Controller 配置。