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

网站建设成本包含哪些方面网站索引量是什么意思

网站建设成本包含哪些方面,网站索引量是什么意思,设计网站遇到的问题,有赞微商城入口目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念#xff1a; 类加载器#xff08;Class Loader#xff09;是Java虚拟机#xff08;JVM#xff09;的一个重要组件#xff0c;负责加载Java类到内存中并使其可以被JVM执行。类…目录 1.概述 2.双亲委派 3.ServiceClassLoader 4.URLClassLoader 5.加载冲突 1.概述 概念 类加载器Class Loader是Java虚拟机JVM的一个重要组件负责加载Java类到内存中并使其可以被JVM执行。类加载器是Java程序的核心机制之一。 分类 类加载器一共有三种 启动类加载器加载系统类rt.jar。扩展类加载器加载JDK内部rt.jar之外由于JDK版本迭代而新出现的扩展类。应用类加载器加载J用户所配置的classpath下的类。 三种类加载器之间从上到下有父子关系上层是下层的父加载器。 2.双亲委派 在类加载中可能会遇见这样一种情况 JDK里自带一个java.lang.String有一个恶意的攻击类也将类的全类名命名为java.lang.String。如果我们想使用String类型的时候类加载器将这个伪装成JDK的String类的恶意类加载执行系统就将遭受到破坏。 很明显为了安全起见JDK需要一种合理的加载方式来控制类的加载这种合理的加载方式就是——双亲委派机制。 双亲委派机制总结起来就是 先找父级加载器要要是父级加载器没有再由自己加载。 因为启动类加载器、扩展类加载器工作在应用的启动阶段加载的也是JDK内核相关的jar与应用没有太大关系与应用相关的只有应用程序加载类而应用程序的父级最多也就是扩展类加载器、启动类加载器也就是最多找两个双亲拿所以称为双亲委派机制。 整个类加载的详细流程为 我们来看看任意一个ClassLoader的loadClass源码整个源码中双亲委派的体现很直接 类加载器在需要加载一个类class的时候会先判断类是否被自己加载过 如果没有调用其成员变量classloader parent委托其父载器帮忙加载 父加载器再重复以上过程如果递归到最顶级的启动类加载器发现都加载不了 当前启动器会自行加载。 3.ServiceClassLoader SPI机制 SPIService Provider Interface是在JDK1.6中提出的一种基于接口的服务发现机制它允许第三方服务提供者扩展框架的功能。在SPI机制中框架定义一组接口并规定这些接口的实现类必须以一定的命名规则放在特定的路径下然后通过Java自带的SPI机制动态地加载和实例化这些实现类。 基于SPI机制可以实现这样的生态结构由官方制定一些标准厂商去给出实现也就是官方给出接口由各大厂商去实现接口如JAVA EE规范中的JDBC规范等等支撑SPI实现的核心是一个类加载器——ServiceClassLoader。 ServiceClassLoader是一种用于加载和实例化服务提供者的工具类。服务提供者是指实现了特定接口或抽象类的类而服务加载器则负责在运行时动态地查找和加载这些实现类。 定义服务接口定义一个Java接口或抽象类用于描述服务提供者必须实现的行为。 实现服务提供者定义一个或多个服务提供者实现服务接口或抽象类。 配置服务提供者在META-INF/services目录下创建一个以服务接口或抽象类名为文件名的文件并在文件中列出所有实现服务接口或抽象类的类名。 加载服务提供者使用Service Loader类动态加载和实例化服务提供者。 代码示例 接口 package com.eryi;public interface HelloService {void sayHello(); } 实现类 package com.eryi;public class ChineseHelloService implements HelloService{Overridepublic void sayHello() {System.out.println(你好);} } package com.eryi;public class EnglishHelloService implements HelloService{Overridepublic void sayHello() {System.out.println(Hello);} } 发布服务 在META-INF/services目录下创建一个名为com.eryi.HelloService的文件文件内容如下 com.eryi.EnglishHelloService com.eryi.ChineseHelloService 服务发现 package com.eryi;import java.util.ServiceLoader;public class test {public static void main(String[] args) {ServiceLoaderHelloService loader ServiceLoader.load(HelloService.class);for (HelloService service : loader) {service.sayHello();}} } 运行结果: 4.URLClassLoader 启动类加载器、扩展类加载器、应用类加载器均是在程序工作之前完成对各个路径下所有jar包的加载的这些路径里的jar包后续如果有什么变化这三个类加载器是无法进行加载从而动态进行更新的。URLClassLoader就是为了实现这种动态加载而出现的。 URLClassLoader支持三种路径 目录 jar包 网络 代码示例 public class test {public static void main(String[] args) throws Exception {// 创建一个URLClassLoader指定加载路径为当前目录URLClassLoader classLoader new URLClassLoader(new URL[] { new URL(file:./) });// 动态加载HelloWorld类Class? helloWorldClass classLoader.loadClass(HelloWorld);// 创建HelloWorld对象Object helloWorld helloWorldClass.newInstance();// 调用HelloWorld对象的sayHello方法helloWorldClass.getMethod(sayHello).invoke(helloWorld);} }class HelloWorld {public void sayHello() {System.out.println(Hello, world!);} } 由于URLClassLoader具有动态加载的特性所以很适合拿来做热部署。 5.加载冲突 同一个类被不同加载器加载加载结果视为两个不同类。 所以在加载之前需要判断是否被加载如果未加载则遵循双亲委托模型从而避免加载冲突。 代码示例 import java.io.File; import java.net.URL; import java.net.URLClassLoader;public class Main {public static void main(String[] args) throws Exception {// 创建两个不同的URLClassLoader分别加载同一个类URL[] classpath { new File(classes/).toURI().toURL() };URLClassLoader classLoader1 new URLClassLoader(classpath);URLClassLoader classLoader2 new URLClassLoader(classpath);// 使用classLoader1加载HelloWorld类Class? helloWorldClass1 classLoader1.loadClass(HelloWorld);// 使用classLoader2加载HelloWorld类Class? helloWorldClass2 classLoader2.loadClass(HelloWorld);// 输出两个类是否相同System.out.println(helloWorldClass1 helloWorldClass2); // false} }class HelloWorld {public void sayHello() {System.out.println(Hello, world!);} }
http://www.hkea.cn/news/14541265/

相关文章:

  • 淄博公司做网站临沂设计网站的公司
  • 盐山做网站wordpress可视化编辑器插件
  • 网站建设网站免费wordpress 不提示更新
  • 做网站怎样和客户沟通辽宁平台网站建设哪里好
  • Oss怎么做静态网站手机在线做ppt的网站有哪些
  • 网站视觉网站设计制作太原
  • 上海微信网站建设做网站的程序员留备份
  • 有专做代金券的网站吗效果图制作网站有哪些
  • 建设电子网站试卷织梦网站图片修改
  • 网站改版多久恢复网站制作案例策划
  • app门户网站长宁集团网站建设
  • 专门做ppt背景的网站有哪些电子拜年贺卡在线制作网站
  • 东莞响应式网站建设定制布吉做棋牌网站建设哪家便宜
  • 开封建网站的公司php企业网站开发源码
  • 网站的功能搜索优化指的是什么
  • 为企业设计网站泰州建站程序
  • 做的网站有广告图片网上接做网站的单子
  • 网站后台建设公司广州联雅网络科技有限公司
  • 如何用用dw做网站后台学网站开发技术
  • 怎么查看网站哪个公司做的装饰公司网站源码
  • 企业建设网站的价值扩展名 网站
  • 免费手机端网站模板下载工具兰州新区农投建设网站
  • 青岛做网站哪个公司好做任务领取礼品的网站
  • 什么是网站微商城的建设html网页制作表格代码
  • 微信h5制作网站开发wordpress文章样式插件
  • 北京网站优化服务商个人如何推广app
  • 保险网站建设公司深圳网站建设制作哪家口碑好
  • 游戏平台网站制作用毛做简单的网站
  • wps免费模板网站山西省建设工程信息网站
  • 网站建设的工作流程规划设计公司网站