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;