From 5cc77a421912d9f7c17ced2db261b245394d28a0 Mon Sep 17 00:00:00 2001 From: wisdommen <41609381+wisdommen@users.noreply.github.com> Date: Mon, 25 Dec 2023 20:36:25 +1100 Subject: [PATCH] Update annotations and improve plugin registration Documentation regarding the use of `ConfigEntity` and `ConfigEntry` annotations has been clarified in the config-file.md. Furthermore, modifications have been made in the ioc-container.md file to enhance how plugin classes are registered and managed. A static instance of the `MyPlugin` class is now being utilized for smoother registration. --- docs/guide/advanced/ioc-container.md | 50 ++++++++++++++++------------ docs/guide/essentials/config-file.md | 5 ++- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/docs/guide/advanced/ioc-container.md b/docs/guide/advanced/ioc-container.md index 2d2e194..344414f 100644 --- a/docs/guide/advanced/ioc-container.md +++ b/docs/guide/advanced/ioc-container.md @@ -16,45 +16,51 @@ UltiTools 整合了 Spring IOC 容器,如果你接触过 Spring 开发,你 该 `Context` 与 Spring 的 `AnnotationConfigApplicationContext` 一致,具体使用方法可查阅官网文档,本文仅涉及基本的用法。 -所有模块的上下文容器都使用了一个公共的容器作为父容器,该父容器拥有一些 UltiTools 的公共 Bean,也有可能存在其他模块注册的公共 Bean。 +所有模块的上下文容器都使用了一个公共的容器作为父容器,该父容器拥有一些 UltiTools 的公共 Bean,也有可能存在其他模块注册的公共 +Bean。 ## Bean注册 + ### 手动注册 你可以直接使用容器对象的 `register()` 方法进行注册: ```java -context.register(MyBean.class); -context.refresh(); //别忘记刷新上下文 +context.register(MyBean .class); +context. + +refresh(); //别忘记刷新上下文 ``` ### 自动扫描 + 在上述示例中的 `MyBean` 类添加了 `@ConpomentScan(...)` 注解,那么在该Bean注册后会自动扫描并注册给定包名下所有类的 Bean ### 为插件主类注册Bean + 继承 `UltiToolsPlugin` 的类默认不受容器管理,因此你需要手动为其注册Bean 首先你可能需要为你的主类做如下修改: ```java public class MyPlugin extends UltiToolsPlugin { - private MyPlugin plugin; - - public MyPlugin() { // [!code ++] - super(); // [!code ++] - this.plugin = this; // [!code ++] - } // [!code ++] - - @Override - public boolean registerSelf() { - this.plugin = this; // [!code --] - // 插件启动时执行 - return true; - } - - public MyPlugin getInstance() { - return this.plugin; - } + private static MyPlugin plugin; + + public MyPlugin() { // [!code ++] + super(); // [!code ++] + plugin = this; // [!code ++] + } // [!code ++] + + @Override + public boolean registerSelf() { + plugin = this; // [!code --] + // 插件启动时执行 + return true; + } + + public static MyPlugin getInstance() { + return plugin; + } ... } @@ -63,9 +69,10 @@ public class MyPlugin extends UltiToolsPlugin { 然后手动注册 Bean: ```java + @Bean public MyPlugin myPlugin() { - return MyPlugin.getInstance(); + return MyPlugin.getInstance(); } ``` @@ -84,6 +91,7 @@ MyBean myBean = context.getBean(MyBean.class); 如果你的类受容器管理,那么可以使用自动注入: ```java + @Autowired MyBean myBean; //字段注入 diff --git a/docs/guide/essentials/config-file.md b/docs/guide/essentials/config-file.md index 22f78ed..0f97c5a 100644 --- a/docs/guide/essentials/config-file.md +++ b/docs/guide/essentials/config-file.md @@ -15,6 +15,7 @@ UltiTools提供了优雅的单例模式的封装API,让你可以像操作对 ```java @Getter @Setter +@ConfigEntity("some/path/to/config") public class SomeConfig extends AbstractConfigEntity { @ConfigEntry(path = "somepath", comment = "somecomment") private boolean something = false; @@ -24,7 +25,9 @@ public class SomeConfig extends AbstractConfigEntity { } ``` -其中,`@ConfigEntry` 注解用于标记一个配置项,`path` 属性用于指定该配置项在配置文件中键的路径,`comment` 属性用于指定该配置项的注释。 +其中,`@ConfigEntity` 注解用于标记一个配置文件的位置,需要一个字符串参数,用于指定配置文件在插件配置文件夹中的路径。通常这个路径与你在开发过程中resource文件夹目录中的路径是相同的。 + +`@ConfigEntry` 注解用于标记一个配置项,`path` 属性用于指定该配置项在配置文件中键的路径,`comment` 属性用于指定该配置项的注释。 `@Getter` 和 `@Setter` 则为Lombok注解,用于自动生成 `getter` 和 `setter` 方法。