动态加载jar包(一)
一、编写被调用的类
package com.qunar.helloworld;
public class HelloWorld {
public String sayHello(){
return ("helloworld");
}
}
使用eclipse的export功能导出jar包,放在/Users/liqiu/Documents/workspace/HelloWorld.jar
二、编写调用jar包的类
package com.qunar.studyspring.javajar; import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Method; public class JavaJar {
public String doJar() {
try {
URL url = new URL("file:/Users/liqiu/Documents/workspace/HelloWorld.jar"); // 这里需要重点看URLClassLoader用法,
URLClassLoader loader = new URLClassLoader(new URL[] { url }); // URL跟我们日常见到的格式用法不太一样
Class c = loader.loadClass("com.qunar.helloworld.HelloWorld"); // 在上面找到并加载jar包后,可以通过此
Object myObject = c.newInstance(); // 函数加载某个类,并使用 newInstance
// 生成一个新的对象
Method m = c.getDeclaredMethod("sayHello"); // getDeclaredMethod()方法可以获得
// 指定名字的方法
m.setAccessible(true); // setAccessible方法使上面得到的方法可用 System.out.println(m.invoke(myObject)); // 由于sayHello方法返回一个String
// 使用m.invoke去调用方法m 也就是sayHello
} catch (Exception ex) {
System.out.println(ex); }
return "ddddd";
}
}
三、编写测试方法
package com.qunar.studyspring;
import org.junit.Test;
import com.qunar.studyspring.javajar.JavaJar;
public class JarTest {
@Test
public void sayHello(){
JavaJar javajar = new JavaJar();
String ss = javajar.doJar();
System.out.println(ss);
}
}
四、测试结果
helloworld
ddddd
动态加载jar包(一)的更多相关文章
- JAVA动态加载JAR包的实现
如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...
- java动态加载jar包,并运行其中的类和方法
动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...
- 动态加载jar包(二)
上次说的加载jar包,有几个问题没有解决: 1.如果项目包含了其他的jar包如何解决? 2.如何规范上传的jar包的类和方法? 下面就解决一下上面两个问题 一.首先编写被调用的类,这次使用maven工 ...
- 深入浅出Android动态加载jar包技术
在实际项目中,由于某些业务频繁变更而导致频繁升级客户端的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路,将核心的易于变更的业务封装在jar包里然后通过网络下载下来,再由 ...
- 动态加载jar包中的类(方式一)
嘛, 直接上代码 public static class TestClassLoader extends ClassLoader { @Override protected Class<?> ...
- Java动态加载JAR包
参考代码: package org; import java.io.File; import java.net.URL; import java.net.URLClassLoader; import ...
- JAVA动态加载JAR包执行程序
入口代码 import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.ne ...
- Android动态加载jar、apk的实现
前段时间到阿里巴巴参加支付宝技术分享沙龙,看到支付宝在Android使用插件化的技术,挺好奇的.正好这几天看到了农民伯伯的相关文章,因此简单整理了下,有什么错误希望大神指正. 核心类 1.1 ...
- 【Android】Android动态加载Jar、APK的实现
本文介绍Android中动态加载Jar.APK的实现.而主要用到的就是DexClassLoader这个类.大家都知道Android和普通的Java虚拟机有差别,它只能加载经过处理的dex文件.而加载这 ...
随机推荐
- android studio build.gradle中 project.ANDROID_BUILD_SDK_VERSION
1.メニューの [File] -> [Import Module]2.Source directory に先ほど解凍したディレクトリを指定3.「facebook」 を選択した状態に Finish ...
- SharePoint Online 创建和使用视图
前言 本文介绍如何在Office 365中创建和使用视图. 正文 首先,解释一下什么是SharePoint站点视图,所谓视图,就是列表的一个呈现形式,包含特定的栏.排序.筛选.分组等特性,我们通常创建 ...
- MyBatis入参类型是List时判断非空
一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from tab ...
- Chrome快捷键大全
Chrome上我基本不怎么用快捷键,但是发现了切换标签页的快捷键后觉得十分好用,所以就分享如下. 切换上一个标签:Ctrl+PgUp 切换下一个标签:Ctrl+PgDn 打开新标签页:Ctrl+T 通 ...
- WinForm自定义控件–TextBox扩展
一.简单回顾 在前两节中,对Panel和GroupBox控件进行了相关的扩展应用,主要都是设置控件的边框以及边框颜色等.本节,继续对WinForm现有的控件TextBox进行扩展,来满足实际开发中 ...
- 关于Spring-Data-Jpa的一些理解
spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管 ...
- tf.transpose函数的用法讲解
tf.transpose函数中文意思是转置,对于低维度的转置问题,很简单,不想讨论,直接转置就好(大家看下面文档,一看就懂). tf.transpose(a, perm=None, name='tra ...
- Martin Fowler谈微服务的优缺点
很多开发团队已经认识到微服务架构比单体架构更优越.但是也有其他团队感觉到这是一种消弱生产力的负担.就像任何软件架构,微服务架构同样有利弊.为了能做出一个明智的选择,你必须了解这些应用并将它们运用到你特 ...
- go语言之进阶篇创建goroutine协程
1.goroutine是什么 goroutine是Go并行设计的核心.goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现 ...
- Word Ladder leetcode java
题目: Given two words (start and end), and a dictionary, find the length of shortest transformation se ...