/\*\*
* 插件id
*/
private String id;
/\*\*
* 版本
*/
private String version;
/\*\*
* 描述
*/
private String description;
/\*\*
* 插件路径
*/
private String path;
/\*\*
* 插件启动状态
*/
private PluginState pluginState;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PluginInfo other = (PluginInfo) obj;
return Objects.equals(id, other.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
public void setPluginState(PluginState started) {
this.pluginState = started;
}
}
#### 插件监听器
**PluginListener**
插件监听器接口
public interface PluginListener {
/\*\*
* 注册插件成功
* @param pluginInfo 插件信息
*/
default void startSuccess(PluginInfo pluginInfo){
}
/\*\*
* 启动失败
* @param pluginInfo 插件信息
* @param throwable 异常信息
*/
default void startFailure(PluginInfo pluginInfo, Throwable throwable){
}
/\*\*
* 卸载插件成功
* @param pluginInfo 插件信息
*/
default void stopSuccess(PluginInfo pluginInfo){
}
/\*\*
* 停止失败
* @param pluginInfo 插件信息
* @param throwable 异常信息
*/
default void stopFailure(PluginInfo pluginInfo, Throwable throwable){
}
}
**DefaultPluginListenerFactory**
插件监听工厂,对自定义插件监听器发送事件
public class DefaultPluginListenerFactory implements PluginListener {
private final List<PluginListener> listeners;
public DefaultPluginListenerFactory(ApplicationContext applicationContext){
listeners = new ArrayList<>();
addExtendPluginListener(applicationContext);
}
public DefaultPluginListenerFactory(){
listeners = new ArrayList<>();
}
private void addExtendPluginListener(ApplicationContext applicationContext){
Map<String, PluginListener> beansOfTypeMap = applicationContext.getBeansOfType(PluginListener.class);
if (!beansOfTypeMap.isEmpty()) {
listeners.addAll(beansOfTypeMap.values());
}
}
public synchronized void addPluginListener(PluginListener pluginListener) {
if(pluginListener != null){
listeners.add(pluginListener);
}
}
public List<PluginListener> getListeners() {
return listeners;
}
@Override
public void startSuccess(PluginInfo pluginInfo) {
for (PluginListener listener : listeners) {
try {
listener.startSuccess(pluginInfo);
} catch (Exception e) {
}
}
}
@Override
public void startFailure(PluginInfo pluginInfo, Throwable throwable) {
for (PluginListener listener : listeners) {
try {
listener.startFailure(pluginInfo, throwable);
} catch (Exception e) {
}
}
}
@Override
public void stopSuccess(PluginInfo pluginInfo) {
for (PluginListener listener : listeners) {
try {
listener.stopSuccess(pluginInfo);
} catch (Exception e) {
}
}
}
@Override
public void stopFailure(PluginInfo pluginInfo, Throwable throwable) {
for (PluginListener listener : listeners) {
try {
listener.stopFailure(pluginInfo, throwable);
} catch (Exception e) {
}
}
}
}
#### 工具类
**DeployUtils**
部署工具类,读取jar包中的文件,判断class是否为Spring bean等
@Slf4j
public class DeployUtils {
/\*\*
* 读取jar包中所有类文件
*/
public static Set readJarFile(String jarAddress) {
Set<String> classNameSet = new HashSet<>();
try(JarFile jarFile = new JarFile(jarAddress)) {
Enumeration<JarEntry> entries = jarFile.entries();//遍历整个jar文件
while (entries.hasMoreElements()) {
JarEntry jarEntry = entries.nextElement();
String name = jarEntry.getName();
if (name.endsWith(PluginConstants.CLASS_SUFFIX)) {
String className = name.replace(PluginConstants.CLASS_SUFFIX, "").replaceAll("/", ".");
classNameSet.add(className);
}
}
} catch (Exception e) {
log.warn("加载jar包失败", e);
}
return classNameSet;
}
public static InputStream readManifestJarFile(File jarAddress) {
try {
JarFile jarFile = new JarFile(jarAddress);
//遍历整个jar文件
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
6534557)]
[外链图片转存中…(img-Qowmw5j7-1714186534557)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新