Skip to content

添加 Controller ​

手动添加 Controller ​

在 tio-boot 框架中,启动类上使用 @AComponentScan 注解,Controller 类上使用 @RequestPath 注解。被 @AComponentScan 标记的启动类会自动扫描并初始化所有被 @RequestPath 标记的 Controller 类。

然而,在某些情况下,为了提升性能,可能不使用 @AComponentScan。此时,可以通过手动添加 Controller 的方式来实现。

示例代码 ​

以下是手动添加 Controller 的示例代码:

java
TioBootHttpControllerRouter controllerRouter = TioBootServer.me().getControllerRouter();
ControllerFactory aopFactory = new AopControllerFactory();
controllerRouter.addControllers(scannedClasses, aopFactory);

完整实例 ​

启动类 ​

java
package com;

import com.config.DubboProviderConfig;
import nexus.io.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。

配置类 ​

java
package com.config;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import nexus.io.context.BootConfiguration;
import nexus.io.controller.ControllerFactory;
import nexus.io.tio.boot.http.handler.AopControllerFactory;
import nexus.io.tio.boot.http.router.TioBootHttpControllerRouter;
import nexus.io.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 类示例 ​

java
package com.controller;

@RequestPath("/health")
public class HealthController {

    public RespBodyVo status() {
        Kv kv = Kv.by("online", DataResult.salesmanUserMap);
        return RespBodyVo.ok(kv);
    }
}

详细说明 ​

  1. 启动类 (DubboProviderApplication):

    • 负责启动应用程序。
    • 使用 TioApplication.run 方法启动 tio-boot 框架,并传入配置类 DubboProviderConfig。
    • 记录启动耗时,便于性能监控。
  2. 配置类 (DubboProviderConfig):

    • 实现 BootConfiguration 接口,负责框架的配置。
    • 在 config 方法中,手动添加需要的 Controller 类到 scannedClasses 列表中。
    • 获取 TioBootHttpControllerRouter 实例,用于管理 Controller 路由。
    • 创建 AopControllerFactory 实例,实现 AOP 功能。
    • 调用 addControllers 方法,将 Controller 类列表和 AOP 工厂添加到路由器中。
  3. Controller 类 (HealthController):

    • 使用 @RequestPath 注解定义路由路径 /health。
    • 定义 status 方法,返回当前服务的健康状态。

总结 ​

在 tio-boot 框架中,虽然 @AComponentScan 提供了便捷的自动扫描和初始化 Controller 的功能,但在追求高性能的场景下,手动添加 Controller 可以减少不必要的扫描开销。通过手动管理 Controller 类列表,并结合 AOP 工厂,可以实现高效且灵活的 Controller 配置。

MIT Licensed