Java调用jar包中的方法

Util.java

@Component
public class Util {
          
   
	public static String jarPath;
	public static String classUrl;
	public static String credentialUrl;
	public static String szUserName;
	public static String szPassWord;

	@Value("${encryption.jarPath}")
	public void setJarPath(String jarPath) {
          
   
		EncryptionUtil.jarPath = jarPath;
	}

	@Value("${encryption.classUrl}")
	public void setClassUrl(String classUrl) {
          
   
		EncryptionUtil.classUrl = classUrl;
	}
	
	@Value("${encryption.szUserName}")
	public void setSzUserName(String szUserName) {
          
   
		EncryptionUtil.szUserName = szUserName;
	}

	@Value("${encryption.szPassWord}")
	public void setSzPassWord(String szPassWord) {
          
   
		EncryptionUtil.szPassWord = szPassWord;
	}

	/**
	 * 读取jar包
	 * @param jarPath jar包存放的路径,可以是部署服务所在的linux上
	 */
	public static void loadJar(String jarPath) {
          
   
		File jarFile = new File(jarPath);
		if (!jarFile.exists()) {
          
   
			throw new RuntimeException("找不到jar包");
		}
		// 从URLClassLoader类中获取类所在文件夹的方法,jar也可以认为是一个文件夹
		Method method = null;
		try {
          
   
			method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
		} catch (NoSuchMethodException | SecurityException e1) {
          
   
			e1.printStackTrace();
		}
		// 获取方法的访问权限以便写回
		boolean accessible = method.isAccessible();
		try {
          
   
			method.setAccessible(true);
			// 获取系统类加载器
			URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
			URL url = jarFile.toURI().toURL();
			method.invoke(classLoader, url);
		} catch (Exception e) {
          
   
			e.printStackTrace();
		} finally {
          
   
			method.setAccessible(accessible);
		}
	}
	
	/**
	 *
	 * @param data
	 * @throws Exception
	 */
	public static String test(String data){
          
   
		String szResult = null;
		try {
          
   
			byte[] dataByte = data.getBytes("UTF-8");
			loadJar(jarPath);
			Class<?> clazz = Class.forName(classUrl);
			Object instance = clazz.newInstance();
		Object logInResult = clazz.getDeclaredMethod("LogIn", String.class, String.class).invoke(instance,szUserName,szPassWord);
		Object logInIErrCodeObj = clazz.getField("iErrCode").get(logInResult);
		int logInCode = (Integer)logInIErrCodeObj;
		if (logInCode != 0) {
          
   
			Object logInIErrMsgObj = clazz.getField("szErrMsg").get(logInResult);
			String logInIErrMsg = (String)logInIErrMsgObj;
			throw new RuntimeException(logInIErrMsg);
		}
		}  catch (Exception e) {
          
   
			e.printStackTrace();
		}
		return szResult;
	}
}

application.yml

encryption:
  jarPath: C:\a\WAsecurity.jar
  classUrl: Wasecurity.IscJcrypt
  szUserName: test
  szPassWord: test
经验分享 程序员 微信小程序 职场和发展