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变化
java spring包_java 自定义加载器,加载spring包,动态加载实现,jar包隔离,tomcat加载webapp方式...相关推荐
- eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包
1 maven本地仓库认识 maven本地仓库中的jar目录一般分为三层:图中的1 2 3分别如下所示: 1 groupId 2 artifactId 3 version 4 jar包的依赖 如果要将 ...
- java interceptor用法_java自定义拦截器用法实例
本文实例讲述了java自定义拦截器及其用法.分享给大家供大家参考.具体如下: LoginInterceptor.java文件如下: package com.tq365.util; import jav ...
- java 反射 工厂_JAVA反射机制、工厂模式与SPRING IOC
ABSTRACT Spring的IOC(控制反转)是Spring框架的灵魂,有了它才有了Spring的很多其他的灵活的特性.使用 Spring 开发项目时,控制层.业务层.DAO 层都是通过 IoC ...
- java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】
本文实例讲述了java实现切割wav音频文件的方法.分享给大家供大家参考,具体如下: import it.sauronsoftware.jave.Encoder; import it.sauronso ...
- erp开发和java开发区别_Java程序员求职必学:Spring boot学习指南!
黑马程序员上海中心 学姐微信:CZBKSH 关注 咳咳,今天学姐就来和你们说说Spring对于Java程序员的重要性. 首先,Spring 官网首页是这么介绍自己的--"Spring: th ...
- 已经导入jar包mysql还是报错_java通过JDBC连接数据库,老是报错:ClassNotFoundException.该导入的jar包我也已经导入了。...
代码如下:publicfinalclassDBclass{publicstaticStringuser="root";publicstaticStringpassword=&quo ...
- 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...
黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题!作者丨OSMin链接:https://juejin.im/post/5 ...
- Java程序利用POJ读写Excel的.xls或.xlsx文件所需的3个jar包
Java程序利用POJ读写Excel文件时,不能只用poi的jar包,因为它还依赖于xmlbeans的jar包,xmlbeans又以来与common-collections的jar包,因此,正常使用P ...
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
最新文章
- body,td,th {
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
- 数据结构——树、森林和二叉树之间的转换
- 计算机专业简历自我评价,计算机专业毕业生简历自我评价
- Postman查看完整的请求报文
- mine layer(2008 World Final C)
- Java程序性能优化
- layui离线文档2.2.5
- SpringBoot项目多环境配置(亲测有效)
- 捷径|皮皮虾去水印教程
- analyze怎么优化oracle,Analyze table对Oracle性能的提升
- iphone和mac互传文件_华为手机连接苹果电脑文件传输教程:一键文件互传、备份和恢复...
- Mybatis使用choose when
- “九阳神功”是怎么炼成的?
- Wangle源码分析:编解码Handler
- 在微信小程序中怎么让一个页面的信息传递到另一个页面
- nbu客户端卸载_卸载NETBACKUP FOR LINUX
- 任正非自罚100万:“不要脸”的人,有多可怕?
- pip安装Cartopy小白版
- 高效能创业者的七项习惯
热门文章
- java treemap api_Java 8 Stream API toMap转换为TreeMap
- emit传参,获取返回值
- IEnumerable.EachTSource(FuncTSource, TSource predicate) 逐个更改列表成员的值
- C++学习笔记之对文件的操作2
- Android程序杀死自己的进程和其他程序进程方法
- php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...
- grav html5,如何通过html5实现摇一摇的功能
- phpMyAdmin 配置
- 依赖注入模式中,为什么用对象而不是用数组传递?
- Python爬虫爬取美剧网站