从工厂模式回看解决双亲委派问题

本文介绍了JVM如何通过上下文加载器解决双亲委派模式下核心类加载非核心类的问题。上下文加载器允许核心类通过创建新的ClassLoader实例来加载应用类,从而避免双亲委派的限制。此外,文章还探讨了JDK 9中双亲委派模型的变化,平台类加载器可以直接访问应用类加载器加载的类,打破了原有的单向访问限制。
摘要由CSDN通过智能技术生成

目录

上下文加载器

突破双亲委派模式

JDK 9双亲委派模型


      简单工厂模式下,假设核心类和工厂方法由启动类加载器加载,应用类由应用类加载器加载,因为双亲委派模式下上层的类加载器无法访问下层ClassLoader加载的类,所以会导致启动类加载器加载的工厂方法无法创建应用类加载器加载的类的实例。在工厂模式中解决的方式就是把工厂方法抽象出来,具体生成实例的逻辑交由子类来实现,简单工厂模式变成抽象工厂模式,这个在上一篇日志中总结到,那么回到双亲委派问题,JVM解决的方式是在启动类加载器代码中新建一个ClassLoader来完成对下层应用类加载器加载的类的实例化,具体来看看它是怎么做的。

 

上下文加载器

      回到JVM里,工厂模式对应的就是核心类提供个外部类的接口,SPI(Service Provider Interface),这个接口就是外部类需要自己实现业务逻辑的接口,拿DocumentBuilderFactory类举例,该类是一个抽象类,可以实现对XML文件的解析,由启动类加载器加载,所以是一个核心类,类中有一个newInstance方法,负责创建并返回一个DocumentBuilderFactory实例,具体实现在FactoryFind.find()方法中:

public static DocumentBuilderFactory newInstance() {
	try {
		return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值