Skip to content

Commit

Permalink
Update annotations and improve plugin registration
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
wisdommen committed Dec 25, 2023
1 parent e410e26 commit 5cc77a4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 22 deletions.
50 changes: 29 additions & 21 deletions docs/guide/advanced/ioc-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

...
}
Expand All @@ -63,9 +69,10 @@ public class MyPlugin extends UltiToolsPlugin {
然后手动注册 Bean:

```java

@Bean
public MyPlugin myPlugin() {
return MyPlugin.getInstance();
return MyPlugin.getInstance();
}
```

Expand All @@ -84,6 +91,7 @@ MyBean myBean = context.getBean(MyBean.class);
如果你的类受容器管理,那么可以使用自动注入:

```java

@Autowired
MyBean myBean; //字段注入

Expand Down
5 changes: 4 additions & 1 deletion docs/guide/essentials/config-file.md
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,7 +25,9 @@ public class SomeConfig extends AbstractConfigEntity {
}
```

其中,`@ConfigEntry` 注解用于标记一个配置项,`path` 属性用于指定该配置项在配置文件中键的路径,`comment` 属性用于指定该配置项的注释。
其中,`@ConfigEntity` 注解用于标记一个配置文件的位置,需要一个字符串参数,用于指定配置文件在插件配置文件夹中的路径。通常这个路径与你在开发过程中resource文件夹目录中的路径是相同的。

`@ConfigEntry` 注解用于标记一个配置项,`path` 属性用于指定该配置项在配置文件中键的路径,`comment` 属性用于指定该配置项的注释。

`@Getter``@Setter` 则为Lombok注解,用于自动生成 `getter``setter` 方法。

Expand Down

0 comments on commit 5cc77a4

Please sign in to comment.