You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docs/versioned_docs/version-2.17/developer-guide/plugin/basics/server/object-management.md

2.5 KiB

title description
插件中的对象管理 了解如何在创建中创建对象和管理对象依赖

在插件中你可以使用 Spring Framework 提供的常用 Bean 注解来标注一个类,然后就能使用依赖注入功能注入其他类的对象。这省去了使用工厂创建类和维护的过程,你可以像开发一个常规的 Spring 项目一样来开发插件,目前支持以下 Spring Framework 的特性:

  1. Core Technologies
  2. Web on Reactive
  3. Testing

通过模板插件创建的项目中你会看到 StarterPlugin 标注了 @Component 注解:

@Component
public class StarterPlugin extends BasePlugin {
}

假设项目中有一个 FruitService,并将其声明了为了 Bean

@Service
public class FruitService {

}

你可以在任何同样声明为 Bean 的类中使用依赖注入来使用它:

@Component
public class Demo {
  private final FruitService fruitService;

  public Demo(FruitService fruitService) {
    this.fruitService = fruitService;
  }
  // use it...
}

依赖注入 Halo 提供的 Bean

目前 Halo 只提供了少数几个 Bean 可以供插件依赖注入:

  • run.halo.app.extension.ReactiveExtensionClient用于管理自定义模型对象的增删改查它是反应式的。
  • run.halo.app.extension.ExtensionClient用于管理自定义模型对象的增删改查它是阻塞的只能用在非 NIO 线程中,如后台任务。
  • run.halo.app.extension.SchemeManager用于管理自定义模型定义的注册和销毁。
  • run.halo.app.infra.ExternalUrlSupplier用于获取用户配置的 Halo 外部访问地址。
  • run.halo.app.core.extension.service.AttachmentService用于操作附件。
  • run.halo.app.notification.NotificationReasonEmitter用于发送通知。
  • run.halo.app.notification.NotificationCenter用于管理通知的订阅和取消订阅。
  • run.halo.app.infra.ExternalLinkProcessor用于处理将一个相对地址转换为外部访问地址。
  • org.springframework.security.web.server.context.ServerSecurityContextRepository用于获取操作用户的认证上下文信息如自动登录场景。

即其他不在上述列表中的类的对象都是不可依赖注入的。