当前位置: 首页> 汽车> 时评 > 兰州正规seo整站优化工具_独立网店系统哪个好_百度推广员工工资怎么样_登封seo公司

兰州正规seo整站优化工具_独立网店系统哪个好_百度推广员工工资怎么样_登封seo公司

时间:2025/7/11 10:46:20来源:https://blog.csdn.net/m0_73363097/article/details/143467506 浏览次数: 0次
兰州正规seo整站优化工具_独立网店系统哪个好_百度推广员工工资怎么样_登封seo公司

具体实现

Service

public interface JarService {Boolean loadJarByName(LoadJarDTO dto);
}

impl:


@Service
@RequiredArgsConstructor
@Slf4j
public class JarServiceImpl implements JarService {private final SpringContextUtil springContextUtil;@Overridepublic Boolean loadJarByName(LoadJarDTO dto) {//初始化File-加载jar所在目录File jarFile = new File(dto.getJarPath());if (!jarFile.exists()){return false;}List<String> loadClassList = this.getLoadClass(jarFile.getAbsolutePath());if (CollectionUtils.isEmpty(loadClassList)){return false;}//加载jarClassLoader classLoader = ClassLoaderUtil.getJarClassLoader(jarFile);for (String loadClassPath : loadClassList) {Class<?> clazz = null;try {clazz = classLoader.loadClass(loadClassPath);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}if(!this.isLoadClass(clazz)){continue;}//生成需要注册到ioc的bean名称// clazz.getSimpleName()用于获取表示该类的简单名称(不包括包名)。简单名称就是类名本身,而不带任何修饰或包的前缀。String beanName = getBeanName(dto.getPreBeanName(),clazz.getSimpleName()) ;//加载需要加载的if (!dto.getIsOverLoad() && springContextUtil.containsBeanDefinition(beanName)){continue;}if (dto.getIsOverLoad() && springContextUtil.containsBeanDefinition(beanName)){springContextUtil.unregisterBean(beanName);}springContextUtil.registerBean(beanName,clazz);}return true;}private static String getBeanName(String name, String className) {return StringUtils.uncapitalize(name) + StringUtils.capitalize(className);}private boolean isLoadClass(Class<?> clazz) {if (clazz == null){return false;}//是否是接口if (clazz.isInterface()){return false;}//是否是抽象类if (Modifier.isAbstract(clazz.getModifiers())){return false;}if (clazz.getAnnotation(Service.class) != null){return true;}if (clazz.getAnnotation(Component.class) != null){return true;}if (clazz.getAnnotation(Repository.class) != null){return true;}if (clazz.getAnnotation(Configuration.class) != null){return true;}return false;}private List<String> getLoadClass(String jarPath) {Set<String> classPathList = new HashSet<>();File file = new File(jarPath);//获取jar的流,打开jar文件try ( JarInputStream jarInputStream = new JarInputStream(FileUtil.getInputStream(file))){//逐个获取jar种文件JarEntry jarEntry = jarInputStream.getNextJarEntry();//遍历while (jarEntry != null){//获取文件路径String name = jarEntry.getName();if (name.endsWith(".class")){String classNamePath = name.replace(".class", "").replace("/",".");classPathList.add(classNamePath);}jarEntry = jarInputStream.getNextJarEntry();}} catch (IOException e) {log.error(e.getMessage());throw new RuntimeException("获取加载类路径失败");}return new ArrayList<>(classPathList);}
}

使用:

新建一模块,写一个简单类:

@Service
public class CalculateServiceImpl implements CalculateService {@Overridepublic int add(int a, int b) {return a + b;}@Overridepublic int minus(int a, int b) {return a - b;}
}

建立一个公共接口,放在公共模块,以供加载jar时候,可以获取接口方法

public interface CalculateService {int add(int a,int b);int minus(int a ,int b);
}

然后 cleam-install打成jar

建立一加载使用:

    @GetMapping("/calculate/{beanName}/{a}/{b}")private Integer calculate( @PathVariable(value = "beanName") String beanName,@PathVariable(value = "a") Integer a, @PathVariable("b") Integer b){return jarService.calculate(beanName,a,b);}@Overridepublic Integer calculate(String beanName, Integer a, Integer b) {CalculateService calculateService = SpringContextUtil.getBean(getBeanName(beanName,beanName+"Impl"), CalculateService.class);int add = calculateService.add(a, b);return add;}private static String getBeanName(String name, String className) {return StringUtils.uncapitalize(name) + StringUtils.capitalize(className);}

关键字:兰州正规seo整站优化工具_独立网店系统哪个好_百度推广员工工资怎么样_登封seo公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: