java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...

java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式

发布时间:2018-08-20 12:02,

浏览次数:774

, 标签:

java

spring

jar

tomcat

webapp

加载器加载的是配置好classpath路径上的class文件或jar包,资源文件等等,

使用继承URLClassLoader的自定义加载器,设置好url(URLClassLoader.addUrl)可以方便的实现自定义加载,多版本类文件隔离共存等等问题

目标是能够加载spring-core-4.3.10.RELEASE.jar,调用SpringVersion.getVersion(),然后打印类是哪个启动器加载的

文件:

MyLoader.java 自定义classloader,继承URLClassLoader,可以实现自己的定制化加载方式

Handler.java 方便操作加载后的类,强转,调用等等

Spring.java

编译后的class,被加载的类,继承Handler,并在方法内调用SpringVersion.getVersion(),判断是否能加载使用spring包

Test.java main, 测试类

MyLoader.java

import java.net.URL; import java.net.URLClassLoader; public class MyLoader

extends URLClassLoader { public MyLoader(URL[] urls) { super(urls); } public

ClassloadClass(String name) throws ClassNotFoundException{ return super

.loadClass(name); } }

Handler.java

public interface Handler { void doIt(); }

Spring.java

import org.springframework.core.SpringVersion; public class Spring implements

Handler{ @Override public void doIt() {

System.out.println(Spring.class.getClassLoader());

System.out.println(SpringVersion.class.getClassLoader()); SpringVersion

springVersion =new SpringVersion(); System.out.println(springVersion);

System.out.println(SpringVersion.getVersion()); } }

Test.java

import java.net.URL; public class Test { public static void main(String[] args)

throws Exception{ URL[] urls = new URL[2]; //字节码路径,包根目录 urls[0] = new URL("file"

,null,"/Users/lukecheung/proj/testclass/"); //jar包目录 //使用jar

protocol不能打印版本,SpringVersion.getVersion() null // urls[1] = new

URL("jar",null,"file:/Users/proj/proj/mspringmvc/out/WEB-INF/lib/spring-core-4.3.10.RELEASE.jar!/");

urls[1] = new URL("file",null,

"/Users/proj/proj/mspringmvc/out/WEB-INF/lib/spring-core-4.3.10.RELEASE.jar");

ClassLoader classLoader =new MyLoader(urls); //需要类全路径,包括全包名 Class c =

classLoader.loadClass("Spring"); //测试加载jar包内的类 // Class c =

classLoader.loadClass("org.springframework.core.SpringVersion"); Handler

handler = (Handler) c.newInstance(); handler.doIt(); } }

idea 普通java项目,project

structure—modules–dependencies,加入spring-core-4.3.10.RELEASE.jar

才能编译Spring.java运行,然后删除刚才添加的dependencies配置与Spring类代码,把编译的spring.class复制到其他目录(非classpath目录),再次运行Test#main

方法查看输出的classloader变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#递归、动态规划计算斐波那契数列

//递归public static long recurFib(int num){if (num < 2){return num;}else{return recurFib(num - 1) recurFib(num - 2);}}//动态规划public static long dynFib(int num){int[] nums new int[num];for (int i 0; i < num; i){nums[i] 0;}if (num 1 || num 2){…

java随机产生十个坐标_java中随机坐标

你的问题有两个&#xff1a;1、出现的位置不允许再出现2、当所有的位置都为1的时候&#xff0c;程序完成(地鼠已经去过所有的地洞&#xff0c;而且没有重复)。如果你的问题是这样的话&#xff0c;答案如下&#xff1a;整个的思路&#xff1a;有一个地鼠类&#xff0c;地鼠类里面…

java中使用几率_Java中使用蒙特卡洛算法计算德州扑克成牌概率(二)- 计算牌面分值...

德州扑克中比较重要的一个算法就是计算牌面的得分&#xff0c;不仅仅关乎概率计算的结果&#xff0c;同时也需要很高的性能。蒙特卡洛算法计算的次数越多结果越准确&#xff0c;因此算法的性能至关重要。下面是一个高性能的牌面java计算算法。参数介绍&#xff1a;1)cards 需要…

ubuntu14.04 upgrade出现【Ubuntu is running in low-graphics mode】问题的一个解决办法

在ubuntu14.04上安装docker的时候&#xff0c;由于眼花没看清下图这句话&#xff1a; 直接执行了sudo apt-get upgrade命令。然后发生了一个悲剧&#xff01; 重启后出现下面这个错误&#xff01; 而且在点击OK进入下一步后&#xff0c;再也无法选中其他的配置选项……当时我就…

java 类及对象的课后作业_JAVA类和对象课后作业

1.使用类的静态字段和构造函数&#xff0c;我们可以跟踪某个类所创建对象的个数。请写一个类&#xff0c;在任何时候都可以向它查询“你已经创建了多少个对象&#xff1f;”代码&#xff1a;//显示类//YiMingLai 2016.10.19public class lei {/*** param args*/public static v…

正则表达式二探

什么是正则表达式。 简单说就是按照某种规则匹配符合条件的字符串。 通配符&#xff1a;* https://regexper.com/在线测试正则表达网址。 转载于:https://www.cnblogs.com/tuoxiong/p/6148037.html

java 怎么用 string method return数量_java教程之Map应该怎么用

java教程之Map应该怎么用在自学或者看java教程的时候&#xff0c;大家多多少少都存在着这样或者那样的疑惑&#xff0c;对于这些中软国际小编一直也在整理&#xff0c;今天为大家献上的是关于Map应该怎样去用的一些方法&#xff0c;还是跟过去一样&#xff0c;在这里&#xff0…

使用 ExecuteMultiple 提高批量数据加载的性能

您可以使用 ExecuteMultipleRequest 消息在 Microsoft Dynamics CRM Online 2016 Update 和 Microsoft Dynamics CRM 2016&#xff08;本地&#xff09; 中&#xff08;尤其在 Internet 延迟可能是最大限制因素的 Microsoft Dynamics CRM Online 中&#xff09;支持更高吞吐批量…

安装ODIS报错 java_(实用技术)大众奥迪ODIS常见问题处理方法

我们在平时使用ODIS过程中常常会遇到一下问题&#xff0c;导致我们不知道应该怎么处理。今天这篇文章中我们将陈列一些常见的问题解答&#xff0c;希望对大家有帮助。一、BCM(BFM)的引导型功能不能用解决方案如果桑塔纳&#xff0c;Rapid&#xff0c;新polo等车型遇到BCM(BFM)的…

gulp入坑系列(1)——安装gulp

前言 好吧&#xff0c;我承认我是为了搞定Sass编译CSS文件的问题&#xff0c;迷一样的着手入gulp的坑&#xff0c;sass和gulp的爬坑历程大概会一起更新。然后感觉这里windows和mac的流程差不多&#xff0c;不过mac的通常在指令前加sudo &#xff0c;本喵是windows的本本&#x…

java中的sql语句书写_Java中sql语句之通配符*

在java中执行SQL语句要特别注意通配符的问题&#xff0c;否则是不会成功的&#xff1a;在ACCESS中的通配符是*例&#xff1a;select * from student where name like 张*在标准的SQL语言中的通配符是%例&#xff1a;select * from student where name like 张%在java…

Oracle 数据库中对记录进行分页处理

学习到 oracle 的视图的时候&#xff0c;了解到对 Oracle 中数据的记录进行分页处理和 Mysql 提供的 limit 来进行分页处理大有不同&#xff0c;limit 是 mysql 中特有的关键字。 那么在 oracle 中如何实现对记录的分页处理呢&#xff1f; 解决办法&#xff1a;使用 ROWNUM 1.…

python中split啥意思_python中split的用法详解_后端开发

如何用python正则表达式匹配字符串&#xff1f;_后端开发用python正则表达式匹配字符串的方法&#xff1a;1、当匹配单个位置的字符串时&#xff0c;可以使用【(.?)】正则表达式来提取&#xff1b;2、当连续多个位置的字符串匹配时&#xff0c;可以使用【?P…】这个正则表达式…

sublimeText OmniMarkupPreviewer 404

这个错误也是出现的莫名奇妙。 "Error: 404 Not Found Sorry, the requested URL http://127.0.0.1:51004/view/29 caused an error:buffer_id(29) is not valid (closed or unsupported file format)NOTE: If you run multiple instances of Sublime Text, you may want …

python写的程序怎么打包成exe_python--- 如何将自己的程序打包成exe ?

最近用python Tkinter 写了一个看stock的小工具.. . 把它调节成半透明悬浮 你懂得但是每次总用pycharm 或者调python去加载使用多少有些不便&#xff0c;如何打包成exe成了问题。百度一下找了 pyinstaller 感觉使用起来还不错。步骤如下&#xff1a;1.官网下载对应的pyins…

spring定时器,定时器一次执行两次的问题

Spring 定时器 方法一&#xff1a;注解形式 配置文件头加上如下&#xff1a; xmlns:task"http://www.springframework.org/schema/task"http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 需要 quartz 包 &l…

python处理实例_python处理xml实例

"""Author zyhFileName read_xml_1.pyTime 18-9-26 下午5:19"""from xml.etree import ElementTreeimport ospath (/home/zyh/Desktop/xml17)xml_file_list os.listdir(path)print(xml_file_list)read_list []with open(./riskCar_pic.txt…

SQLite For .Net 已经整合了32位和64位

以前引用SQLite.DLL的时候&#xff0c;如果是winform等桌面程序&#xff0c;还要分32位和64位不一样的DLL&#xff0c;但最近已经整合为一个包了 打开vs的程序包管理器控制器&#xff0c;输入&#xff1a; install-package system.data.sqlite 自动安装即可。 转载于:https:/…

21天通关python 磁力_python 磁力链接搜索器

标签&#xff1a;API作者的 原文 &#xff1a; http://blog.163.com/lixiangqiu_9202/blog/static/535750372014370156424/我看到这个API之后第一个想法就是用python写个小玩意儿1 importrequests2 importjson3 importos4 importcodecs5 importsys67 sys.setrecursionlimit(100…

Java名字的由来

Java语言的历程丰富多彩&#xff0c;被现在众多程序员和企业广泛使用&#xff0c;不用质疑这是Java的领先技术的结果。 Java是Sun公司开发的一种编程语言&#xff0c;Sun公司最初的方向是让Java来开发一些电器装置程序&#xff0c;如&#xff1a;机顶盒、公交卡&#xff0c;Sun…