diff --git a/README.md b/README.md
index 75f724a76737a0d7c80e692b9bae45b805bbdd56..5005ba4814e7766e74b571499be7c0055e0b68a1 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
13. 利用扩展机制, 定制了SpringBoot-Mybatis扩展包。使用该扩展包, 使用者可以在插件中自定义Mapper接口、Mapper xml 以及对应的实体bean。并且支持集成Mybatis-Plus。
14. 支持插件之间的通信。
15. 支持插件中使用事务注解。
-16. 支持Swagger。
+16. 支持Swagger。(仅支持首次启动初始化的插件)
### 运行环境
1. jdk1.8+
@@ -80,7 +80,7 @@ Maven目录结构下所示
com.gitee.starblues
springboot-plugin-framework
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
```
@@ -815,6 +815,11 @@ File->Project Structure->Project Settings->Artifacts->点击+号->JAR->From modu
### 版本更新
+#### 2.1.2 版本
+1. 修复使用多AOP情况, 无法加载插件类(被AOP代理的类)的bug。
+2. 新增可以通过插件id获取插件中的bean的实现。详见:PluginUser->getPluginBeans(String pluginId, Class aClass)
+3. 新增插件注册监听器可通过Class方式添加。案例详见: basic-eaxmple->com.basic.example.main.config.ExamplePluginListener
+
#### 2.1.1 版本
1. 插件中支持事务注解。
2. 修复重复启动插件时报错的bug。
diff --git a/example/basic-example/basic-example-main/pom.xml b/example/basic-example/basic-example-main/pom.xml
index 4c424956e660b8ecd08776e69ec98638a816a53e..bbb7639823760cdc8fd507fff3a31d0ca1c44fc2 100644
--- a/example/basic-example/basic-example-main/pom.xml
+++ b/example/basic-example/basic-example-main/pom.xml
@@ -13,7 +13,7 @@
com.gitee.starblues
basic-example-main
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..838cbdd5041bd07f6fe9c6aa8071f4c5f75668bf
--- /dev/null
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/ExamplePluginListener.java
@@ -0,0 +1,43 @@
+package com.basic.example.main.config;
+
+import com.gitee.starblues.integration.PluginApplication;
+import com.gitee.starblues.integration.listener.PluginListener;
+import com.gitee.starblues.integration.user.PluginUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 插件监听者
+ *
+ * @author zhangzhuo
+ * @version 1.0
+ */
+
+public class ExamplePluginListener implements PluginListener {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final PluginUser pluginUser;
+
+ public ExamplePluginListener(PluginApplication pluginApplication){
+ this.pluginUser = pluginApplication.getPluginUser();
+ }
+
+
+ @Override
+ public void registry(String pluginId) {
+ logger.info("Listener: registry pluginId {}", pluginId);
+ }
+
+ @Override
+ public void unRegistry(String pluginId) {
+ logger.info("Listener: unRegistry pluginId {}", pluginId);
+ }
+
+ @Override
+ public void failure(String pluginId, Throwable throwable) {
+
+ }
+}
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
index 5a6ebb06ec8a3f108a1c8b60d01b8299fd4e397c..3c24ec22073856d388a605a72d2f21ce34af0bdc 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/config/PluginBeanConfig.java
@@ -35,7 +35,9 @@ public class PluginBeanConfig {
*/
@Bean
public PluginApplication pluginApplication(){
- return new DefaultPluginApplication();
+ DefaultPluginApplication defaultPluginApplication = new DefaultPluginApplication();
+ defaultPluginApplication.addListener(ExamplePluginListener.class);
+ return defaultPluginApplication;
}
/**
diff --git a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
index 848b0f35804e711cb9236c7c78f39fd45b216c03..f132b237379bde785ea32ff3aecb5008e7064839 100644
--- a/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
+++ b/example/basic-example/basic-example-main/src/main/java/com/basic/example/main/rest/HelloResource.java
@@ -5,6 +5,7 @@ import com.gitee.starblues.integration.user.PluginUser;
import com.basic.example.main.plugin.ConsoleName;
import com.basic.example.main.plugin.ConsoleNameFactory;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -72,6 +73,19 @@ public class HelloResource {
return getConsoleNames(stringBuffer, consoleNames);
}
+
+ /**
+ * 通过 AbstractPluginSpringBeanRefresh 工厂获取实现类
+ * 打印实现接口 com.basic.demo.main.main.plugin.ConsoleName 的实现类
+ * @return 返回所有实现 com.basic.demo.main.main.plugin.ConsoleName 接口的实现类的 name() 方法的输出
+ */
+ @GetMapping("/consoleName/{pluginId}")
+ public String plugin1ConsoleName(@PathVariable("pluginId") String pluginId){
+ StringBuffer stringBuffer = new StringBuffer();
+ List consoleNames = pluginUser.getPluginBeans(pluginId, ConsoleName.class);
+ return getConsoleNames(stringBuffer, consoleNames);
+ }
+
/**
* 调用接口 name() 方法,并拼接输出
* @param stringBuffer stringBuffer
diff --git a/example/basic-example/basic-example-runner/pom.xml b/example/basic-example/basic-example-runner/pom.xml
index 5f027ce3541d8f101e795b0b95b9c6d8b17d9d24..f00d93947f35a480b7f0cbd03f6eb4f6440cb7a1 100644
--- a/example/basic-example/basic-example-runner/pom.xml
+++ b/example/basic-example/basic-example-runner/pom.xml
@@ -14,7 +14,7 @@
com.gitee.starblues
basic-example-runner
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
diff --git a/example/basic-example/plugins/basic-example-plugin1/plugin.properties b/example/basic-example/plugins/basic-example-plugin1/plugin.properties
index caf0f41d6685eb897f146b28bd8da24855da2057..c6e214cc2a5db40ac6f77a6adf2bb9ead6577a0a 100644
--- a/example/basic-example/plugins/basic-example-plugin1/plugin.properties
+++ b/example/basic-example/plugins/basic-example-plugin1/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=basic-example-plugin1
plugin.class=com.basic.example.plugin1.DefinePlugin
-plugin.version=2.1.1-RELEASE
+plugin.version=2.1.2-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/basic-example/plugins/basic-example-plugin1/pom.xml b/example/basic-example/plugins/basic-example-plugin1/pom.xml
index d810a6f2e47f3da5ac6f296c2ceb9a626260f26f..4405990caf6fb3b26c7d5d6d92384cabd932e7c2 100644
--- a/example/basic-example/plugins/basic-example-plugin1/pom.xml
+++ b/example/basic-example/plugins/basic-example-plugin1/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
../pom.xml
basic-example-plugin1
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
diff --git a/example/basic-example/plugins/basic-example-plugin2/plugin.properties b/example/basic-example/plugins/basic-example-plugin2/plugin.properties
index ffa78377f83ec602addd273a75af6a6e009baeb4..c427e920652d0cc692ad4517140ed5f7e3f58ff5 100644
--- a/example/basic-example/plugins/basic-example-plugin2/plugin.properties
+++ b/example/basic-example/plugins/basic-example-plugin2/plugin.properties
@@ -1,4 +1,4 @@
-plugin.id=springboot-plugin-example-plugin2
+plugin.id=basic-example-plugin2
plugin.class=com.basic.example.plugin2.DefinePlugin
-plugin.version=2.1.1-RELEASE
+plugin.version=2.1.2-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/basic-example/plugins/basic-example-plugin2/pom.xml b/example/basic-example/plugins/basic-example-plugin2/pom.xml
index 78d5ada9942c1b7702743c3c5b95208975fdbcd1..01a40c3b8f3d0288cbb96cde1dcd18f37667a049 100644
--- a/example/basic-example/plugins/basic-example-plugin2/pom.xml
+++ b/example/basic-example/plugins/basic-example-plugin2/pom.xml
@@ -8,16 +8,16 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
../pom.xml
basic-example-plugin2
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
- springboot-plugin-example-plugin2
+ basic-example-plugin2
com.basic.example.plugin2.DefinePlugin
${project.version}
StarBlues
diff --git a/example/basic-example/plugins/pom.xml b/example/basic-example/plugins/pom.xml
index 147f5893011cecc0df345a18191027f63cb3aafb..de6db8d8c4fc0047918ce3269ef5ff936fe54ff9 100644
--- a/example/basic-example/plugins/pom.xml
+++ b/example/basic-example/plugins/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
basic-example-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
diff --git a/example/basic-example/pom.xml b/example/basic-example/pom.xml
index cb1f9fdbd1885958b4452b113a060498bb063c7b..03da47f3b788362361499afe0de28cef12c0c337 100644
--- a/example/basic-example/pom.xml
+++ b/example/basic-example/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
basic-example
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
基本案例
diff --git a/example/integration-mybatis/integration-mybatis-main/pom.xml b/example/integration-mybatis/integration-mybatis-main/pom.xml
index 3cce1b53ff7b70f5bef9c741d5bd04e0960454e1..0fda6581ff96259d6fb53c93651f38e1635c52c5 100644
--- a/example/integration-mybatis/integration-mybatis-main/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-main/pom.xml
@@ -14,7 +14,7 @@
com.gitee.starblues
integration-mybatis-main
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
主程序模块
diff --git a/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml b/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
index 53902145d3d580cf1718bf85abe56ab643c358ec..5e6205169e3bba1073f99f9ecb5ad88cc310e7a7 100644
--- a/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-plugin-parent/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
diff --git a/example/integration-mybatis/integration-mybatis-runner/pom.xml b/example/integration-mybatis/integration-mybatis-runner/pom.xml
index a905146eb3a4504f3c3ff07c7a9382278c7bf20a..5ae0f1a1f95fbc93e657d2a95b78f24c7d0e63d9 100644
--- a/example/integration-mybatis/integration-mybatis-runner/pom.xml
+++ b/example/integration-mybatis/integration-mybatis-runner/pom.xml
@@ -14,8 +14,8 @@
com.gitee.starblues
integration-mybatis-runner
- 2.1.1-RELEASE
- pom
+ 2.1.2-RELEASE
+ jar
启动程序模块。将启动类配置到该模块下
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties b/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
index 589f1fd789aa7a6f01f4bfffd6d01b9c692c0f3d..6962b0a4b920555b0ab4e3bc13eab20f11e75d8a 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatis-plugin1
plugin.class=com.mybatis.plugin1.ExamplePlugin1
-plugin.version=2.1.1-RELEASE
+plugin.version=2.1.2-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml b/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
index 5886d18be13f4461a5e432263ea175f1a6897793..c9c89b0691e40518509886e4d7f05e739ad02e15 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
../../integration-mybatis-plugin-parent
integration-mybatis-plugin1
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
@@ -24,7 +24,7 @@
2.8.2
2.0.1
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/rest/Plugin1Controller.java b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/rest/Plugin1Controller.java
index ebb18c8662b9e0b4ba3d48b22280efe8f2ffbe95..6895ae5c34e66a203d7bc28979ac97fb4b4fcfcc 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/rest/Plugin1Controller.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/rest/Plugin1Controller.java
@@ -4,7 +4,6 @@ import com.google.gson.Gson;
import com.mybatis.plugin1.entity.Plugin1;
import com.mybatis.plugin1.mapper.Plugin1Mapper;
import com.mybatis.plugin1.service.TestService;
-import com.mybatis.plugin1.service.TestTransactional;
import com.mybatis.plugin1.service.TranServiec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional.java b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional1.java
similarity index 93%
rename from example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional.java
rename to example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional1.java
index ca5d0a0844ae6ed463898547b2042c8394e3ed8c..f0ce55a19899a3f840d3c2ec291edaa9c46276d9 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin1/src/main/java/com/mybatis/plugin1/service/TestTransactional1.java
@@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
* @version 1.0
*/
@Service
-public class TestTransactional implements TranServiec{
+public class TestTransactional1 implements TranServiec{
@Autowired
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties b/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
index 8e5d30c1cc8cb9a69ad4e5e60e078157237de422..94fa87aa40a184f6b00a469f05ed3881e3466e9b 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatis-plugin2
plugin.class=com.mybatis.plugin2.ExamplePlugin2
-plugin.version=2.1.1-RELEASE
+plugin.version=2.1.2-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml b/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
index f8feb4b372b2d64282f01c324d7ef3702a623350..a7e58b3bfa1a3a1b1ef1bf7e4914b4855f89ab30 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/pom.xml
@@ -8,12 +8,12 @@
com.gitee.starblues
integration-mybatis-plugin-parent
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
../../integration-mybatis-plugin-parent
integration-mybatis-plugin2
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
@@ -24,7 +24,7 @@
2.8.2
2.0.1
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/rest/Plugin2Controller.java b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/rest/Plugin2Controller.java
index aa5f36dd966a9de665c22d098901f2379551f9cb..de4bca89da50569d58cd87e07ed19593287d5ac4 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/rest/Plugin2Controller.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/rest/Plugin2Controller.java
@@ -2,7 +2,7 @@ package com.mybatis.plugin2.rest;
import com.mybatis.plugin2.entity.Plugin2;
import com.mybatis.plugin2.mapper.Plugin2Mapper;
-import com.mybatis.plugin2.service.TestTransactional;
+import com.mybatis.plugin2.service.TestTransactional2;
import com.mybatis.plugin2.config.Plugin2Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -29,7 +29,7 @@ public class Plugin2Controller {
private Plugin2Config plugin2Config;
@Autowired
- private TestTransactional testTransactional;
+ private TestTransactional2 testTransactional;
@GetMapping
diff --git a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional.java b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional2.java
similarity index 95%
rename from example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional.java
rename to example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional2.java
index 0db9c97871596b007fce4867444c388f96e98303..177236697e98c130d57b2db10ca3ac5601fff9a1 100644
--- a/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional.java
+++ b/example/integration-mybatis/plugins/integration-mybatis-plugin2/src/main/java/com/mybatis/plugin2/service/TestTransactional2.java
@@ -12,7 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
* @version 1.0
*/
@Component
-public class TestTransactional {
+public class TestTransactional2 {
diff --git a/example/integration-mybatis/pom.xml b/example/integration-mybatis/pom.xml
index be8f5dd2ffc4fbdf49844ba0402bb9d539937e95..2cfcf96f56aac9878c990b36a2c5b90ae2252257 100644
--- a/example/integration-mybatis/pom.xml
+++ b/example/integration-mybatis/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
integration-mybatis
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
集成mybatis案例
diff --git a/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml b/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
index 9a2e031a1e00716a5048e5378fc9e9934790e0be..f6bfb6cf9f1dacdfbd4d0a190f591b7792a4bd04 100644
--- a/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
+++ b/example/integration-mybatisplus/integration-mybatisplus-main/pom.xml
@@ -13,7 +13,7 @@
com.gitee.starblues
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
integration-mybatisplus-main
jar
集成mybatis-plus 案例--主程序
diff --git a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
index 79e85bd8d7913cc830379e3faded28177c4c57c3..ff568ab7042c17b199fb11002cba3c5b25ada121 100644
--- a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
+++ b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/plugin.properties
@@ -1,4 +1,4 @@
plugin.id=integration-mybatisplus-plugin
plugin.class=com.mybatisplus.plugin.MybatisPlusPlugin
-plugin.version=2.1.1-RELEASE
+plugin.version=2.1.2-RELEASE
plugin.provider=StarBlues
\ No newline at end of file
diff --git a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
index 238732ff1b0090ae077aaae71a488f4927d4cb94..66b65993b6374ef05609fd96962aa1c0023a797b 100644
--- a/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
+++ b/example/integration-mybatisplus/plugins/integration-mybatisplus-plugin/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
integration-mybatisplus-plugin
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
jar
diff --git a/example/integration-mybatisplus/pom.xml b/example/integration-mybatisplus/pom.xml
index 6c65d97fa512e373ac695e5e921b710eac041254..6afcf998319f4f076df50be33859a2145d586234 100644
--- a/example/integration-mybatisplus/pom.xml
+++ b/example/integration-mybatisplus/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
integration-mybatisplus
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
集成mybatis-plus案例
diff --git a/example/pom.xml b/example/pom.xml
index 52475604600468d09314309b23fd7552d5a08850..6d436720772c69d386c0c66dfead651ef02cdb65 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -6,7 +6,7 @@
com.gitee.starblues
springboot-plugin-framework-example
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
pom
diff --git a/pom.xml b/pom.xml
index 342f5de6a7b84d280e3dd98d9dd0dbcf422055e4..2019325ca3c3d7ce2fede874ac55d99f385f9cbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.gitee.starblues
springboot-plugin-framework-parent
pom
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
spring boot 插件开发集成包
diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/README.md b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/README.md
index 7b5fd222e24a7f6ff32485ee5a91fde1abb5a6f3..ce27fd38e0c9ca364fb1df4e6be553dd260e216b 100644
--- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/README.md
+++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/README.md
@@ -175,9 +175,12 @@ public class PluginDataServiceImpl extends ServiceImplWrapper3.1.0
1.6
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
2.0.1
3.2.0
diff --git a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisMapperProcessor.java b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisMapperProcessor.java
index 77c5d60d5277ab2939af354debcd637582a049ab..bd87cb0b005b6fc55319e12a2cd6760d8c84888b 100644
--- a/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisMapperProcessor.java
+++ b/springboot-plugin-framework-extension/springboot-plugin-framework-extension-mybatis/src/main/java/com/gitee/starblues/extension/mybatis/PluginMybatisMapperProcessor.java
@@ -52,7 +52,7 @@ public class PluginMybatisMapperProcessor implements PluginPipeProcessorExtend {
PluginMybatisMapperProcessor(ApplicationContext applicationContext) {
this.applicationContext = (GenericApplicationContext) applicationContext;
springBeanRegister = new SpringBeanRegister(applicationContext);
- springBeanRegister.register(MybatisInjectWrapper.class);
+ springBeanRegister.register("PluginMybatisMapperProcessor", MybatisInjectWrapper.class);
mybatisInjectWrapper = applicationContext.getBean(MybatisInjectWrapper.class);
}
@@ -78,6 +78,7 @@ public class PluginMybatisMapperProcessor implements PluginPipeProcessorExtend {
return;
}
BasePlugin basePlugin = pluginRegistryInfo.getBasePlugin();
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
Set beanNames = new HashSet<>();
for (Class> groupClass : groupClasses) {
if (groupClass == null) {
@@ -93,7 +94,7 @@ public class PluginMybatisMapperProcessor implements PluginPipeProcessorExtend {
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, applicationContext);
mybatisInjectWrapper.processBeanDefinitions(definitionHolder, groupClass);
beanNames.add(beanName);
- PluginInfoContainer.addRegisterBeanName(beanName);
+ PluginInfoContainer.addRegisterBeanName(pluginId, beanName);
}
pluginRegistryInfo.addProcessorInfo(KEY, beanNames);
}
@@ -104,9 +105,10 @@ public class PluginMybatisMapperProcessor implements PluginPipeProcessorExtend {
if(beanNames == null){
return;
}
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
for (String beanName : beanNames) {
applicationContext.removeBeanDefinition(beanName);
- PluginInfoContainer.removeRegisterBeanName(beanName);
+ PluginInfoContainer.removeRegisterBeanName(pluginId, beanName);
}
}
diff --git a/springboot-plugin-framework/pom.xml b/springboot-plugin-framework/pom.xml
index 72b03999b56f0f2f8c95b77ef4a01bceadde210c..66a9b8a976fdd4fdc6cb37b9eff8994590b72698 100644
--- a/springboot-plugin-framework/pom.xml
+++ b/springboot-plugin-framework/pom.xml
@@ -13,7 +13,7 @@
com.gitee.starblues
springboot-plugin-framework
jar
- 2.1.1-RELEASE
+ 2.1.2-RELEASE
spring boot 插件式开发集成包
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/DefaultPluginFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/DefaultPluginFactory.java
index d5f72bc04ac25f3f88a7a3caaf2fa67637d1c5f4..9bb39e1b37453f01a192e857b67a902e0d96fe12 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/DefaultPluginFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/DefaultPluginFactory.java
@@ -13,6 +13,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.framework.autoproxy.InfrastructureAdvisorAutoProxyCreator;
import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.GenericApplicationContext;
import org.springframework.util.ClassUtils;
import java.util.ArrayList;
@@ -33,9 +34,8 @@ public class DefaultPluginFactory implements PluginFactory {
/**
* 注册的插件集合
*/
-
-
private final Map registerPluginInfoMap = new HashMap<>();
+ private final GenericApplicationContext applicationContext;
private final PluginPipeProcessor pluginProcessor;
private final PluginPostProcessor pluginPostProcessor;
private final PluginListenerFactory pluginListenerFactory;
@@ -45,6 +45,7 @@ public class DefaultPluginFactory implements PluginFactory {
*/
private Integer buildType = 0;
private final List buildContainer = new ArrayList<>();
+ private final List listenerClasses = new ArrayList<>();
public DefaultPluginFactory(ApplicationContext applicationContext) {
this(applicationContext, null);
@@ -55,6 +56,7 @@ public class DefaultPluginFactory implements PluginFactory {
PluginListenerFactory pluginListenerFactory) {
this.pluginProcessor = new PluginPipeProcessorFactory(applicationContext);
this.pluginPostProcessor = new PluginPostProcessorFactory(applicationContext);
+ this.applicationContext = (GenericApplicationContext) applicationContext;
if(pluginListenerFactory == null){
this.pluginListenerFactory = new PluginListenerFactory();
} else {
@@ -65,7 +67,6 @@ public class DefaultPluginFactory implements PluginFactory {
-
@Override
public synchronized PluginFactory registry(PluginWrapper pluginWrapper) throws Exception {
if(pluginWrapper == null){
@@ -78,7 +79,6 @@ public class DefaultPluginFactory implements PluginFactory {
if(!buildContainer.isEmpty() && buildType == 2){
throw new IllegalAccessException("Unable to Registry operate. Because there's no build");
}
-
PluginRegistryInfo registerPluginInfo = new PluginRegistryInfo(pluginWrapper);
AopUtils.resolveAop(pluginWrapper);
try {
@@ -122,6 +122,8 @@ public class DefaultPluginFactory implements PluginFactory {
if(buildContainer.isEmpty()){
throw new IllegalAccessException("No Found registered or unRegistry plugin. Unable to build");
}
+ // 构建注册的Class插件监听者
+ pluginListenerFactory.buildListenerClass((GenericApplicationContext) applicationContext);
try {
if(buildType == 1){
registryBuild();
@@ -163,6 +165,11 @@ public class DefaultPluginFactory implements PluginFactory {
pluginListenerFactory.addPluginListener(pluginListener);
}
+ @Override
+ public void addListener(Class pluginListenerClass) {
+ pluginListenerFactory.addPluginListener(pluginListenerClass);
+ }
+
@Override
public void addListener(List pluginListeners) {
if(pluginListeners != null){
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
index bc3437e7c15faa315e1d2914a4d494777e1280f7..404cd5668194d2ae1f381dcb239e6dac7a891262 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/PluginInfoContainer.java
@@ -2,7 +2,9 @@ package com.gitee.starblues.factory;
import org.springframework.util.StringUtils;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
/**
@@ -19,23 +21,61 @@ public class PluginInfoContainer {
/**
* 全局插件中定义的BaneName
*/
- private static Set springRegisterBeanNames = new HashSet<>();
+ private static Map> springRegisterBeanNames = new HashMap<>();
-
- public static synchronized void addRegisterBeanName(String beanName){
+ /**
+ * 添加注册的bean名称
+ * @param pluginId 插件id
+ * @param beanName 注册的bean名称
+ */
+ public static synchronized void addRegisterBeanName(String pluginId, String beanName){
if(!StringUtils.isEmpty(beanName)){
- springRegisterBeanNames.add(beanName);
+ Set beanNames = springRegisterBeanNames.get(pluginId);
+ if(beanNames == null){
+ beanNames = new HashSet<>();
+ springRegisterBeanNames.put(pluginId, beanNames);
+ }
+ beanNames.add(beanName);
}
}
- public static synchronized void removeRegisterBeanName(String beanName){
- springRegisterBeanNames.remove(beanName);
+ /**
+ * 移除注册的bean名称
+ * @param pluginId 插件id
+ * @param beanName 注册的bean名称
+ */
+ public static synchronized void removeRegisterBeanName(String pluginId, String beanName){
+ Set beanNames = springRegisterBeanNames.get(pluginId);
+ if(beanNames != null){
+ beanNames.remove(beanName);
+ }
}
+ /**
+ * 是否存在bean名称
+ * @param pluginId 插件id
+ * @param beanName 注册的bean名称
+ */
+ public static synchronized boolean existRegisterBeanName(String pluginId, String beanName){
+ Set beanNames = springRegisterBeanNames.get(pluginId);
+ if(beanNames != null){
+ return beanNames.contains(beanName);
+ } else {
+ return false;
+ }
+ }
+ /**
+ * 是否存在bean名称
+ * @param beanName 注册的bean名称
+ */
public static synchronized boolean existRegisterBeanName(String beanName){
- return springRegisterBeanNames.contains(beanName);
+ for (Set beanNames : springRegisterBeanNames.values()){
+ if(beanNames.contains(beanName)){
+ return true;
+ }
+ }
+ return false;
}
-
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java
index 9270fe763cf643e32910e9c376fcc00d055ff426..82cced357a9cbc8a024bb52de54e459d0aecf593 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/SpringBeanRegister.java
@@ -25,42 +25,46 @@ public class SpringBeanRegister {
/**
* 默认注册
+ * @param pluginId 插件id
* @param aClass 类名
* @return 注册的bean名称
*/
- public String register(Class> aClass) {
- return register(null, aClass, null);
+ public String register(String pluginId, Class> aClass) {
+ return register(pluginId, null, aClass, null);
}
/**
* 默认注册
+ * @param pluginId 插件id
* @param namePrefix bean名称前缀
* @param aClass 类名
* @return 注册的bean名称
*/
- public String register(String namePrefix, Class> aClass) {
- return register(namePrefix, aClass, null);
+ public String register(String pluginId, String namePrefix, Class> aClass) {
+ return register(pluginId, namePrefix, aClass, null);
}
/**
* 默认注册
+ * @param pluginId 插件id
* @param aClass 类名
* @param consumer 自定义处理AnnotatedGenericBeanDefinition
* @return 注册的bean名称
*/
- public String register(Class> aClass, Consumer consumer) {
- return register(null, aClass, consumer);
+ public String register(String pluginId, Class> aClass, Consumer consumer) {
+ return register(pluginId, null, aClass, consumer);
}
/**
* 默认注册
+ * @param pluginId 插件id
* @param namePrefix bean名称前缀
* @param aClass 注册的类
* @param consumer 自定义处理AnnotatedGenericBeanDefinition
* @return 注册的bean名称
*/
- public String register(String namePrefix, Class> aClass, Consumer consumer) {
+ public String register(String pluginId, String namePrefix, Class> aClass, Consumer consumer) {
AnnotatedGenericBeanDefinition beanDefinition = new
AnnotatedGenericBeanDefinition(aClass);
@@ -79,26 +83,31 @@ public class SpringBeanRegister {
consumer.accept(beanDefinition);
}
applicationContext.registerBeanDefinition(beanName, beanDefinition);
- PluginInfoContainer.addRegisterBeanName(beanName);
+ PluginInfoContainer.addRegisterBeanName(pluginId, beanName);
return beanName;
}
/**
* 指定bean名称注册
+ * @param pluginId 插件id
* @param beanName 指定的bean名称
* @param aClass 注册的类
*/
- public void registerOfSpecifyName(String beanName, Class> aClass){
- registerOfSpecifyName(beanName, aClass, null);
+ public void registerOfSpecifyName(String pluginId, String beanName, Class> aClass){
+ registerOfSpecifyName(pluginId, beanName, aClass, null);
}
/**
* 指定bean名称注册
+ * @param pluginId 插件id
* @param beanName 指定的bean名称
* @param aClass 注册的类
* @param consumer 注册异常
*/
- public void registerOfSpecifyName(String beanName, Class> aClass, Consumer consumer) {
+ public void registerOfSpecifyName(String pluginId,
+ String beanName,
+ Class> aClass,
+ Consumer consumer) {
AnnotatedGenericBeanDefinition beanDefinition = new
AnnotatedGenericBeanDefinition(aClass);
if(PluginInfoContainer.existRegisterBeanName((beanName))){
@@ -109,7 +118,7 @@ public class SpringBeanRegister {
if(consumer != null){
consumer.accept(beanDefinition);
}
- PluginInfoContainer.addRegisterBeanName(beanName);
+ PluginInfoContainer.addRegisterBeanName(pluginId, beanName);
applicationContext.registerBeanDefinition(beanName, beanDefinition);
}
@@ -117,11 +126,12 @@ public class SpringBeanRegister {
/**
* 卸载bean
+ * @param pluginId 插件id
* @param beanName bean名称
*/
- public void unregister(String beanName){
+ public void unregister(String pluginId, String beanName){
applicationContext.removeBeanDefinition(beanName);
- PluginInfoContainer.removeRegisterBeanName(beanName);
+ PluginInfoContainer.removeRegisterBeanName(pluginId, beanName);
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/BasicBeanProcessor.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/BasicBeanProcessor.java
index e45a90fdf43edc788fc5f4cbfb58e6321666f2d9..0726d989575e163ee5dfe6d33102f5f73048e170 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/BasicBeanProcessor.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/BasicBeanProcessor.java
@@ -48,9 +48,10 @@ public class BasicBeanProcessor implements PluginPipeProcessor {
@Override
public void unRegistry(PluginRegistryInfo pluginRegistryInfo) throws Exception {
Set beanNames = pluginRegistryInfo.getProcessorInfo(KEY);
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
if(beanNames != null){
for (String beanName : beanNames) {
- springBeanRegister.unregister(beanName);
+ springBeanRegister.unregister(pluginId, beanName);
}
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigBeanProcessor.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigBeanProcessor.java
index ed054f0c1dc2ef9005e2fe0447341215a857b004..72be7322f42a27236e0170d94f65f993f5242b21 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigBeanProcessor.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/pipe/bean/ConfigBeanProcessor.java
@@ -52,12 +52,13 @@ public class ConfigBeanProcessor implements PluginPipeProcessor {
if(configDefinitions == null || configDefinitions.isEmpty()){
return;
}
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
Set beanNames = new HashSet<>();
for (Class> aClass : configDefinitions) {
String beanName = registry(pluginRegistryInfo, aClass);
if(!StringUtils.isEmpty(beanName)){
beanNames.add(beanName);
- PluginInfoContainer.addRegisterBeanName(beanName);
+ PluginInfoContainer.addRegisterBeanName(pluginId, beanName);
}
}
pluginRegistryInfo.addProcessorInfo(KEY, beanNames);
@@ -69,10 +70,11 @@ public class ConfigBeanProcessor implements PluginPipeProcessor {
if(beanNames == null){
return;
}
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
for (String beanName : beanNames) {
if(defaultListableBeanFactory.containsSingleton(beanName)){
defaultListableBeanFactory.destroySingleton(beanName);
- PluginInfoContainer.removeRegisterBeanName(beanName);
+ PluginInfoContainer.removeRegisterBeanName(pluginId, beanName);
}
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginControllerPostProcessor.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginControllerPostProcessor.java
index 5a2eb033d75df1cd24e94f9dcd9080e0f95d5dd5..503ed118fde1e6df2b3bd495d74505dda4c748cd 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginControllerPostProcessor.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginControllerPostProcessor.java
@@ -80,11 +80,12 @@ public class PluginControllerPostProcessor implements PluginPostProcessor {
if(controllerBeanWrappers == null || controllerBeanWrappers.isEmpty()){
continue;
}
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
for (ControllerBeanWrapper controllerBeanWrapper : controllerBeanWrappers) {
if(controllerBeanWrapper == null){
continue;
}
- unregister(controllerBeanWrapper);
+ unregister(pluginId, controllerBeanWrapper);
process(2,
pluginRegistryInfo.getPluginWrapper().getPluginId(),
controllerBeanWrapper.getBeanClass());
@@ -144,9 +145,10 @@ public class PluginControllerPostProcessor implements PluginPostProcessor {
/**
* 卸载具体的Controller操作
+ * @param pluginId 插件id
* @param controllerBeanWrapper controllerBean包装
*/
- private void unregister(ControllerBeanWrapper controllerBeanWrapper) {
+ private void unregister(String pluginId, ControllerBeanWrapper controllerBeanWrapper) {
Set requestMappingInfos = controllerBeanWrapper.getRequestMappingInfos();
if(requestMappingInfos != null && !requestMappingInfos.isEmpty()){
for (RequestMappingInfo requestMappingInfo : requestMappingInfos) {
@@ -155,7 +157,7 @@ public class PluginControllerPostProcessor implements PluginPostProcessor {
}
String beanName = controllerBeanWrapper.getBeanName();
if(!StringUtils.isEmpty(beanName)){
- springBeanRegister.unregister(beanName);
+ springBeanRegister.unregister(pluginId, beanName);
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginInvokePostProcessor.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginInvokePostProcessor.java
index a2a5074f5006a2bc1e8102452838bb62cad8b044..3aa40d8fc624347efbf77d13f8fa31d3cb043bdb 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginInvokePostProcessor.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/factory/process/post/bean/PluginInvokePostProcessor.java
@@ -75,8 +75,9 @@ public class PluginInvokePostProcessor implements PluginPostProcessor {
for (PluginRegistryInfo pluginRegistryInfo : pluginRegistryInfos) {
Set supperNames = pluginRegistryInfo.getProcessorInfo(getKey(KEY_SUPPERS, pluginRegistryInfo));
Set callerNames = pluginRegistryInfo.getProcessorInfo(getKey(KEY_CALLERS, pluginRegistryInfo));
- unregister(supperNames);
- unregister(callerNames);
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
+ unregister(pluginId, supperNames);
+ unregister(pluginId, callerNames);
}
}
@@ -92,6 +93,7 @@ public class PluginInvokePostProcessor implements PluginPostProcessor {
return;
}
Set beanNames = new HashSet<>();
+ String pluginId = pluginRegistryInfo.getPluginWrapper().getPluginId();
for (Class> supperClass : supperClasses) {
if(supperClass == null){
continue;
@@ -107,7 +109,7 @@ public class PluginInvokePostProcessor implements PluginPostProcessor {
pluginRegistryInfo.getPluginWrapper().getPluginId(), beanName, supperClass.getName());
throw new Exception(error);
}
- springBeanRegister.registerOfSpecifyName(beanName, supperClass);
+ springBeanRegister.registerOfSpecifyName(pluginId, beanName, supperClass);
beanNames.add(beanName);
}
pluginRegistryInfo.addProcessorInfo(getKey(KEY_SUPPERS, pluginRegistryInfo), beanNames);
@@ -157,14 +159,15 @@ public class PluginInvokePostProcessor implements PluginPostProcessor {
/**
* 通过beanName卸载
+ * @param pluginId 插件id
* @param beanNames beanNames集合
*/
- private void unregister(Set beanNames){
+ private void unregister(String pluginId, Set beanNames){
if(beanNames == null || beanNames.isEmpty()){
return;
}
for (String beanName : beanNames) {
- springBeanRegister.unregister(beanName);
+ springBeanRegister.unregister(pluginId, beanName);
}
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java
index d0f8f915e2c5f02d6db08832bb08a49eae2c4057..ea307bc86bc9bf0668be3ec4e5a8517febd4e7d7 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/DefaultPluginApplication.java
@@ -15,6 +15,7 @@ import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.support.GenericApplicationContext;
import java.util.ArrayList;
import java.util.List;
@@ -116,6 +117,11 @@ public class DefaultPluginApplication implements ApplicationContextAware, Plugin
this.listenerFactory.addPluginListener(pluginListener);
}
+ @Override
+ public void addListener(Class pluginListenerClass) {
+ listenerFactory.addPluginListener(pluginListenerClass);
+ }
+
@Override
public void addListener(List pluginListeners) {
if(pluginListeners == null || pluginListeners.isEmpty()){
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
index d3a4925caa2fa90e49db6fa3a26f71eca99ce1df..a0af24721ac5cb219c1532918cb0527bd761738c 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/PluginListenerContext.java
@@ -6,7 +6,8 @@ import com.gitee.starblues.integration.listener.PluginListener;
import java.util.List;
/**
- * 插件bean监听者上下文
+ * 插件bean监听者上下文。
+ * 注意: 监听者必须在初始化插件前添加,否则在初始化阶段可能无法触发添加的监听者。
* @author zhangzhuo
* @version 1.0
*/
@@ -18,6 +19,12 @@ public interface PluginListenerContext {
*/
void addListener(PluginListener pluginListener);
+ /**
+ * 添加监听者
+ * @param pluginListenerClass 插件监听者Class类
+ */
+ void addListener(Class pluginListenerClass);
+
/**
* 追加多个监听者
* @param pluginListeners 插件 bean 监听者集合
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
index 2eb7202bf37d3e312bd403ec6213e7db47d0c753..83cd74471e38db52fe3686e98c1f4d2f741acb0d 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/listener/PluginListenerFactory.java
@@ -1,5 +1,8 @@
package com.gitee.starblues.integration.listener;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.GenericApplicationContext;
+
import java.util.ArrayList;
import java.util.List;
@@ -11,7 +14,8 @@ import java.util.List;
*/
public class PluginListenerFactory implements PluginListener{
- private List listeners = new ArrayList<>();
+ private final List listeners = new ArrayList<>();
+ private final List listenerClasses = new ArrayList<>();
@Override
public void registry(String pluginId) {
@@ -56,6 +60,32 @@ public class PluginListenerFactory implements PluginListener{
}
}
+ /**
+ * 添加监听者
+ * @param pluginListenerClass 插件监听者Class类
+ */
+ public void addPluginListener(Class pluginListenerClass){
+ if(pluginListenerClass != null){
+ synchronized (listenerClasses){
+ listenerClasses.add(pluginListenerClass);
+ }
+ }
+ }
+
+ public void buildListenerClass(GenericApplicationContext applicationContext){
+ if(applicationContext == null){
+ return;
+ }
+ synchronized (listenerClasses){
+ for (Class listenerClass : listenerClasses) {
+ applicationContext.registerBean(listenerClass);
+ T bean = applicationContext.getBean(listenerClass);
+ listeners.add(bean);
+ }
+ listenerClasses.clear();
+ }
+ }
+
/**
* 得到监听者
* @return 监听者集合
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
index c062e84c9fb132016579c44d6de6b487c99058aa..f442856e390c4d806e29c872ca60ecb4b5e7fd9b 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java
@@ -355,6 +355,10 @@ public class DefaultPluginOperator implements PluginOperator {
}
}
+ @Override
+ public List getPluginWrapper() {
+ return pluginManager.getPlugins();
+ }
/**
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
index 91fb9bf409dc5725b077a3f77062423330be48e1..072ebb4d62ac44a5972c793b88f442ff3da73174 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/PluginOperator.java
@@ -3,6 +3,7 @@ package com.gitee.starblues.integration.operator;
import com.gitee.starblues.exception.PluginPlugException;
import com.gitee.starblues.integration.listener.PluginInitializerListener;
import com.gitee.starblues.integration.operator.module.PluginInfo;
+import org.pf4j.PluginWrapper;
import org.springframework.web.multipart.MultipartFile;
import java.nio.file.Path;
@@ -142,5 +143,11 @@ public interface PluginOperator {
*/
Set getPluginFilePaths() throws PluginPlugException;
+ /**
+ * 得到插件的包装类
+ * @return 返回插件包装类集合
+ */
+ List getPluginWrapper();
+
}
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/module/PluginInfo.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/module/PluginInfo.java
index 2ec25b0b724b980d31d92c379b342d06bbe06d13..9b39cde1b0a84026a83371eaabcbf195fb5e4eab 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/module/PluginInfo.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/operator/module/PluginInfo.java
@@ -11,8 +11,6 @@ import org.pf4j.PluginState;
*/
public class PluginInfo {
-
-
/**
* 插件基本信息
*/
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
index fd66e4899e6b7d2728eaf2370d1cbbdd43b4af42..b76d189187523ee1b91200dba89eaf723aa7d6f7 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/DefaultPluginUser.java
@@ -92,6 +92,20 @@ public class DefaultPluginUser implements PluginUser{
return beans;
}
+ @Override
+ public List getPluginBeans(String pluginId, Class aClass) {
+ Map beansOfTypeMap = applicationContext.getBeansOfType(aClass);
+ if(beansOfTypeMap == null){
+ return Collections.emptyList();
+ }
+ List beans = new ArrayList<>();
+ beansOfTypeMap.forEach((beanName, bean)->{
+ if(PluginInfoContainer.existRegisterBeanName(pluginId, beanName)){
+ beans.add(bean);
+ }
+ });
+ return beans;
+ }
/**
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
index d318b696bb3947ba0702418a2e5d4406a0ad6ffb..05b524f8bea00fab25f814118873248a9ee24918 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/integration/user/PluginUser.java
@@ -46,10 +46,18 @@ public interface PluginUser {
* 在主程序中定义的接口。获取插件中实现该接口的实现类。(Spring管理的bean)
* @param aClass 接口的类
* @param bean的类型
- * @return Map
+ * @return 实现 aClass 接口的实现类的集合
*/
List getPluginBeans(Class aClass);
+ /**
+ * 在主程序中定义的接口。获取指定插件中实现该接口的实现类。(Spring管理的bean)
+ * @param pluginId 插件id
+ * @param aClass 接口的类
+ * @param bean的类型
+ * @return 实现 aClass 接口的实现类的集合
+ */
+ List getPluginBeans(String pluginId, Class aClass);
/**
* 得到插件扩展接口实现的bean。(非Spring管理)
diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
index 411e5eeaf93198e15840716827315699db441c28..08b1efe6d325edb6628a09c9083d37b8cc92c0b0 100644
--- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
+++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/load/PluginClassLoader.java
@@ -23,8 +23,6 @@ public class PluginClassLoader implements PluginResourceLoader {
public static final String KEY = "PluginClassProcess";
-
-
@Override
public String key() {
return KEY;