当前位置: 首页 > news >正文

阿里云服务器怎么发布网站wordpress前端可视化编辑

阿里云服务器怎么发布网站,wordpress前端可视化编辑,建设银行个人网银登录,怎么做网页商城为什么要自定义类加载器 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境,如Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序 修改类加载的方式 …
为什么要自定义类加载器
  • 隔离加载类
  • 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境,如Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序
  • 修改类加载的方式
  • 类的加载模型并非强制,除Bootstrap外,其他的加载并非一定要引入,根据实际情况在某个时间点进行按需进行动态加载
  • 扩展加载源
  • 比如从数据库、网络、甚至是电视机机顶盒进行加载
  • 防止源码泄露
  • Java代码容易被编译和篡改,可以进行编译加密,那么类加载也需要自定义,还原加密的字节码
常见的场景
  • 实现类似进程内隔离,类加载器实际上用作不同的命名空间,以提供类似容器、模块化的效果,如两个模块依赖于某个类库的不同版本,如果分别被不同的容器加载,就可以互不干扰,这个方面集大成者是JavaEE和OSGI,JPMS等框架
  • 应用需要从不同的数据源获取类定义信息,如网络数据源,而不是本地文件系统,或者是需要自己操纵字节码,动态修改或生成类型
注意
  • 在一般情况下,使用不同的类加载器去加载不同的功能模块,会提高应用程序的安全性,但是如果涉及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.yayakq.cn/news/51237/

相关文章:

  • 广州网站建设外包建设推广建设部网站统计
  • 视频网站是如何做的大庆哈尔滨网站建设
  • 京美建站有代码吗wordpress表单微信
  • wordpress站点前台请求数过多做一个主题wordpress
  • 网站开发的软件支持苏州建设网站公司在什么地方
  • 磁业 东莞网站建设深圳高端婚介公司
  • fw怎么做网站wordpress浮动菜单
  • 1g内存vps 开电影网站vultr wordpress
  • 个人网站赚广告费山东省双体系建设网站
  • 网站开发 跨平台开发技术建设网站可选择的方案
  • 设计参考图网站做pc网站如何实时预览
  • 网站开发设计的步骤山东天成水利建设 网站
  • 自己做行程的网站企业管理系统软件有哪些
  • ppt做视频模板下载网站有哪些旅游网页模板图片
  • 网页制作工具可以发布网站吗山东省住房和城乡建设厅官网二建报名
  • 网站推广怎样做成都创新互联做网站
  • 网站开发语言p佛山网吧什么时候恢复营业
  • 做视频周边的网站旅行社网站建设规划方案
  • 买空间的网站好凡客诚品vancl
  • 遵义网站seo厦门seo关键词优化运营
  • 网站做下载文件模块做暧暖ox免费网站
  • pc端和移动端的网站区别是什么汕头建站免费模板
  • nodejs做后端的网站淘宝购物返利网站建设app
  • 公司做网站需要准备什么资料做移动端电影网站
  • 购物网站开发的背景介绍网站培训视频
  • 网站备案 固定电话如何做网络营销推广唯选一 诺
  • 电商网站有那些哪个网站可以做分期
  • 鞍山网站制作价格上海网站设计排名
  • 网站开发费入什么费用石家庄搜索引擎优化
  • 网站建设合同书简单版wordpress 开启ssl