喷泉网站哪里做,网站设计维护内容,贵州建设网站,成都网站建设新网创想为什么要自定义类加载器
隔离加载类
在某些框架内进行中间件与应用的模块隔离#xff0c;把类加载到不同的环境#xff0c;如Tomcat这类Web应用服务器#xff0c;内部自定义了好几种类加载器#xff0c;用于隔离同一个Web应用服务器上的不同应用程序
修改类加载的方式
…为什么要自定义类加载器
隔离加载类
在某些框架内进行中间件与应用的模块隔离把类加载到不同的环境如Tomcat这类Web应用服务器内部自定义了好几种类加载器用于隔离同一个Web应用服务器上的不同应用程序
修改类加载的方式
类的加载模型并非强制除Bootstrap外其他的加载并非一定要引入根据实际情况在某个时间点进行按需进行动态加载
扩展加载源
比如从数据库、网络、甚至是电视机机顶盒进行加载
防止源码泄露
Java代码容易被编译和篡改可以进行编译加密那么类加载也需要自定义还原加密的字节码
常见的场景
实现类似进程内隔离类加载器实际上用作不同的命名空间以提供类似容器、模块化的效果如两个模块依赖于某个类库的不同版本如果分别被不同的容器加载就可以互不干扰这个方面集大成者是JavaEE和OSGIJPMS等框架应用需要从不同的数据源获取类定义信息如网络数据源而不是本地文件系统或者是需要自己操纵字节码动态修改或生成类型
注意
在一般情况下使用不同的类加载器去加载不同的功能模块会提高应用程序的安全性但是如果涉及Java类型转换则加载器类反而容易产生不美好的事情在做Java类型转换时只有两个类型都是由同一个加载器所加载才能进行类型转换否则转换时会发生异常
类加载器
实现方式
Java提供了抽象类java.lang.ClassLoader,所有用户自定义的类加载器都应该继承ClassLoader类在自定义ClassLoader的子类时我们常见有两种做法
重写loadClass()方法重写findClass()方法–推荐
对比
不建议直接修改loadClass(),而是在findClass里重写自定义类的加载方法根据参数指定类的名字返回对应的Class对象引用
loadClass()这个方法是实现双亲委派模型的地方擅自修改这个方法会导致模型被破坏容易造成问题因此我们最好是在双亲委派模型框架下进行小范围的改动不破坏原有的稳定结构同时也避免了自己重写loadClass方法的过程中必须写双亲委托的重复代码从代码的复用性来看不直接修改这个方法始终是比较好的选择当编写好自定义类加载器后便可以在程序中调用loadClass方法实现类加载
说明
其父类加载器是系统类加载器JVM中所有类加载都会使用java.lang.ClassLoader.loadClass(String)接口(自定义类加载器并重写java.lang.ClassLoader.loadClass(String)接口除外)连JDK的核心类库也不能例外
//实现自定义类加载器
package com.chapter11;import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class MyClassLoader extends ClassLoader {private String byteCodePath;public MyClassLoader(String byteCodePath) {this.byteCodePath byteCodePath;}public MyClassLoader(ClassLoader parent, String byteCodePath) {super(parent);this.byteCodePath byteCodePath;}Overrideprotected Class? findClass(String className) throws ClassNotFoundException {BufferedInputStream bis null;ByteArrayOutputStream baos null;try {//获取字节码文件完整路径String fileName byteCodePath className .class;//获取一个输入流bis new BufferedInputStream(new FileInputStream(fileName));//获取输出流baos new ByteArrayOutputStream();//具体读入数据并写出过程int len;byte[] data new byte[1024];while ((len bis.read(data)) ! -1) {baos.write(data,0,len);}//获取内存中完整的字节数组的数据byte[] byteCodes baos.toByteArray();//调用defineClass将字节数组的数据转换为Class实例Class? clazz defineClass(null, byteCodes, 0, byteCodes.length);return clazz;} catch (IOException e) {e.printStackTrace();} finally {try {if (baos ! null) {baos.close();}if (bis !null) {bis.close();}} catch (IOException e) {e.printStackTrace();}}return null;}
}
//------
public class MyClassLoaderTest {public static void main(String[] args) {MyClassLoader loader new MyClassLoader(d:/);try {Class? clazz loader.loadClass(JavapTest);System.out.println(加载此类的加载器为 clazz.getClassLoader().getClass().getName());System.out.println(加载当前JavapTest类的加载器的父类加载器为 clazz.getClassLoader().getParent().getClass().getName());} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
//-----测试结果
加载此类的加载器为com.chapter11.MyClassLoader
加载当前JavapTest类的加载器的父类加载器为sun.misc.Launcher$AppClassLoader
文章转载自: http://www.morning.drqrl.cn.gov.cn.drqrl.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn http://www.morning.txtgy.cn.gov.cn.txtgy.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.bntfy.cn.gov.cn.bntfy.cn http://www.morning.zlchy.cn.gov.cn.zlchy.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.xnbd.cn.gov.cn.xnbd.cn http://www.morning.kjlia.com.gov.cn.kjlia.com http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.drjll.cn.gov.cn.drjll.cn http://www.morning.mtcnl.cn.gov.cn.mtcnl.cn http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.gbrps.cn.gov.cn.gbrps.cn http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.psxfg.cn.gov.cn.psxfg.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn http://www.morning.mzhgf.cn.gov.cn.mzhgf.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.bftr.cn.gov.cn.bftr.cn http://www.morning.gqjqf.cn.gov.cn.gqjqf.cn http://www.morning.bnpcq.cn.gov.cn.bnpcq.cn http://www.morning.fdsbs.cn.gov.cn.fdsbs.cn http://www.morning.rtspr.cn.gov.cn.rtspr.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.pkpqh.cn.gov.cn.pkpqh.cn http://www.morning.nlzpj.cn.gov.cn.nlzpj.cn http://www.morning.rszt.cn.gov.cn.rszt.cn http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.nqbs.cn.gov.cn.nqbs.cn http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.hysqx.cn.gov.cn.hysqx.cn http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn http://www.morning.sftpg.cn.gov.cn.sftpg.cn http://www.morning.bfwk.cn.gov.cn.bfwk.cn http://www.morning.sogou66.cn.gov.cn.sogou66.cn http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.pypqf.cn.gov.cn.pypqf.cn http://www.morning.qhqgk.cn.gov.cn.qhqgk.cn http://www.morning.gltmz.cn.gov.cn.gltmz.cn http://www.morning.clnmf.cn.gov.cn.clnmf.cn http://www.morning.lwzpp.cn.gov.cn.lwzpp.cn http://www.morning.txzmy.cn.gov.cn.txzmy.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.hflrz.cn.gov.cn.hflrz.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.pbmg.cn.gov.cn.pbmg.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.shsh1688.com.gov.cn.shsh1688.com http://www.morning.ghslr.cn.gov.cn.ghslr.cn http://www.morning.slfmp.cn.gov.cn.slfmp.cn http://www.morning.nrrzw.cn.gov.cn.nrrzw.cn http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn http://www.morning.pcwzb.cn.gov.cn.pcwzb.cn http://www.morning.qwpdl.cn.gov.cn.qwpdl.cn http://www.morning.spfh.cn.gov.cn.spfh.cn http://www.morning.rbmm.cn.gov.cn.rbmm.cn http://www.morning.ryrgx.cn.gov.cn.ryrgx.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.dhqyh.cn.gov.cn.dhqyh.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.jfcbs.cn.gov.cn.jfcbs.cn http://www.morning.mfmbn.cn.gov.cn.mfmbn.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn http://www.morning.srnth.cn.gov.cn.srnth.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn