把外包jar的信息写在配置文件中,这样如果外部jar改变了,只需要修改properties相应的配置即可。
config.properties文件内容如下
jarUrl=E:/MessageSend.jar
className=org.linewell.message.MessageSend
methodName=sendMessage
获取conf.properties的方法如下:
private static Properties props;
//静态代码块
static{
loadProps();
}
/*
*把properties文件加载进来
*/
private synchronized static void loadProps() {
props = new Properties();
FileInputStream in = null;
try {
in = new FileInputStream(new File("E:/config.properties"));
props.load(in);
} catch (FileNotFoundException e) {
} catch (IOException e) {
} finally {
try {
if(null != in) {
in.close();
}
} catch (IOException e) {
}
}
}
/*
*通过传入key值获取对应value
*/
public static String getProperty(String key){
if(null == props) {
loadProps();
}
return props.getProperty(key);
}
通过反射的方式去实例外部jar的类并且调用方法:
/*
*调用外部方法并传值
*/
public static void send(ArrayList<String> arr, String str) {
try {
File file=new File(getProperty("jarUrl"));
URL url=file.toURI().toURL();//获得jar地址
ClassLoader loader=new URLClassLoader(new URL[]{url});//获得类加载器
Class<?> cls;
cls = loader.loadClass(getProperty("className"));//加载外部类
Object obj=cls.newInstance();//实例化
Method method=cls.getMethod(getProperty("methodName"),ArrayList.class,String.class);//获得方法
method.invoke(null,arr,str);//执行方法
} catch (Exception e) {
e.printStackTrace();
}