From 1edd66b47fe6ce324bf846541c0aa6804b3899c1 Mon Sep 17 00:00:00 2001 From: lulee007 Date: Fri, 10 Jan 2020 19:43:29 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8D=20`ScanUtils`:=20?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E8=B7=AF=E5=BE=84=20=E5=85=BC=E5=AE=B9=20`li?= =?UTF-8?q?nux/mac`=20=E8=B7=AF=E5=BE=84=202.=20`PluginResource`:=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=20`isFile`=20`readableByteChannel`=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E9=87=8D=E8=BD=BD,=E5=85=BC=E5=AE=B9=20sprin?= =?UTF-8?q?g=204.x=202.=20`PluginListenerFactory`:=20`buildListenerClass`?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C=20bean=20=E6=96=B9?= =?UTF-8?q?=E5=BC=8F,=E5=85=BC=E5=AE=B9=20spring=204.x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/PluginListenerFactory.java | 35 +++++++++++-------- .../starblues/loader/PluginResource.java | 16 ++------- .../com/gitee/starblues/utils/ScanUtils.java | 30 ++++++++-------- 3 files changed, 39 insertions(+), 42 deletions(-) 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 629eac2..9ec733f 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,6 @@ package com.gitee.starblues.integration.listener; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.context.support.GenericApplicationContext; import java.util.ArrayList; @@ -11,7 +12,7 @@ import java.util.List; * @author zhangzhuo * @version 1.0 */ -public class PluginListenerFactory implements PluginListener{ +public class PluginListenerFactory implements PluginListener { private final List listeners = new ArrayList<>(); private final List listenerClasses = new ArrayList<>(); @@ -21,7 +22,7 @@ public class PluginListenerFactory implements PluginListener{ for (PluginListener listener : listeners) { try { listener.registry(pluginId); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -32,7 +33,7 @@ public class PluginListenerFactory implements PluginListener{ for (PluginListener listener : listeners) { try { listener.unRegistry(pluginId); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -43,7 +44,7 @@ public class PluginListenerFactory implements PluginListener{ for (PluginListener listener : listeners) { try { listener.failure(pluginId, throwable); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -51,34 +52,38 @@ public class PluginListenerFactory implements PluginListener{ /** * 添加监听者 + * * @param pluginListener 插件监听者 */ - public void addPluginListener(PluginListener pluginListener){ - if(pluginListener != null){ + public void addPluginListener(PluginListener pluginListener) { + if (pluginListener != null) { listeners.add(pluginListener); } } /** * 添加监听者 + * * @param pluginListenerClass 插件监听者Class类 - * @param 插件监听者类。继承 PluginListener + * @param 插件监听者类。继承 PluginListener */ - public void addPluginListener(Class pluginListenerClass){ - if(pluginListenerClass != null){ - synchronized (listenerClasses){ + public void addPluginListener(Class pluginListenerClass) { + if (pluginListenerClass != null) { + synchronized (listenerClasses) { listenerClasses.add(pluginListenerClass); } } } - public void buildListenerClass(GenericApplicationContext applicationContext){ - if(applicationContext == null){ + public void buildListenerClass(GenericApplicationContext + applicationContext) { + if (applicationContext == null) { return; } - synchronized (listenerClasses){ + synchronized (listenerClasses) { for (Class listenerClass : listenerClasses) { - applicationContext.registerBean(listenerClass); + // 兼容 spring 4.x + applicationContext.registerBeanDefinition(listenerClass.getName(), BeanDefinitionBuilder.genericBeanDefinition(listenerClass).getBeanDefinition()); T bean = applicationContext.getBean(listenerClass); listeners.add(bean); } @@ -88,6 +93,7 @@ public class PluginListenerFactory implements PluginListener{ /** * 得到监听者 + * * @return 监听者集合 */ public List getListeners() { @@ -96,6 +102,7 @@ public class PluginListenerFactory implements PluginListener{ /** * 得到监听者class + * * @return 监听者class集合 */ public List getListenerClasses() { diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResource.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResource.java index 6cb516b..0b1fd74 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResource.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/loader/PluginResource.java @@ -61,10 +61,7 @@ public class PluginResource implements Resource { } - @Override - public ReadableByteChannel readableChannel() throws IOException { - throw new RuntimeException("This method is not supported"); - } + @Override public long contentLength() throws IOException { @@ -143,16 +140,7 @@ public class PluginResource implements Resource { return false; } - @Override - public boolean isFile() { - try { - URL url = getURL(); - return ResourceUtils.URL_PROTOCOL_FILE.equals(url.getProtocol()); - } catch (IOException e) { - log.debug(e.getMessage(), e); - return false; - } - } + @Override public File getFile() throws IOException { diff --git a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/ScanUtils.java b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/ScanUtils.java index d9ef336..d30a55f 100644 --- a/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/ScanUtils.java +++ b/springboot-plugin-framework/src/main/java/com/gitee/starblues/utils/ScanUtils.java @@ -1,6 +1,8 @@ package com.gitee.starblues.utils; +import org.springframework.util.ClassUtils; + import java.io.File; import java.io.IOException; import java.net.JarURLConnection; @@ -9,6 +11,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.Enumeration; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -24,43 +27,42 @@ public class ScanUtils { /** * 扫描指定包中的类。包括子包中的类 + * * @param basePackage 包名 - * @param baseClass 当前操作的基础类 + * @param baseClass 当前操作的基础类 * @return 类全路径 * @throws IOException 扫描异常 */ public static Set scanClassPackageName(String basePackage, Class baseClass) throws IOException { - String classpathRootPath = baseClass.getResource("/").getPath(); - final String classpath = classpathRootPath - .replace("/","\\") - .replaceFirst("\\\\",""); - // 把包名 packageName 转换为路径名 - basePackage = basePackage.replace(".", File.separator); + final String classpath = baseClass.getResource("/").getPath(); // class 文件全路径 - String fullPath = classpath + basePackage; + String fullPath = classpath + ClassUtils.classPackageAsResourcePath(baseClass); return Files.walk(Paths.get(fullPath)) - .filter(path -> path != null) + .filter(Objects::nonNull) .filter(Files::isRegularFile) .filter(path -> { String fileName = path.getFileName().toString(); - if(fileName == null){ + if (fileName == null) { return false; } return fileName.endsWith(".class"); }) .map(path -> { String pathString = path.toString(); - return pathString + // 去头去尾 + pathString = pathString .replace(classpath, "") - .replace("\\",".") - .replace(".class",""); + .replace(".class", ""); + // 转换为 aa.bb.cc + return ClassUtils.convertResourcePathToClassName(pathString); }).collect(Collectors.toSet()); } /** * 扫描jar包中的类。 + * * @param basePackage 包名 * @param classLoader jar的ClassLoader * @return 类全路径 @@ -90,7 +92,7 @@ public class ScanUtils { JarEntry entry = jarEntryEnumeration.nextElement(); String jarEntryName = entry.getName(); if (jarEntryName.contains(".class") && - jarEntryName.replaceAll("/",".").startsWith(basePackage)) { + jarEntryName.replaceAll("/", ".").startsWith(basePackage)) { String className = jarEntryName .substring(0, jarEntryName.lastIndexOf(".")) .replace("/", "."); -- Gitee