java classload_java 动态load class 的方法之一

动态加载类是在运行时在有需要的时候再加载这个类,这在大型系统中是很重要的一个机制,也就是采用lazy模式,在有需要的时候才加载,而不是在application server 一启动的时候就加载了很多类。

当然,动态加载类的技术,最主要的也就是应用java的反射机制(java refection来实现), 另外,很多系统采用插件方式开发,部署,在这样的情况下,动态加载类就显得更重要。目前根据开发过的项目经验,基本可以总结为三总类型:

1、加载一个普通的类

2、从网络上加载另外一个类

3、从其他jar包里面加载一个类.

在搞清楚这些之前,需要了解java classloader 的基本原理: class loader 首先检查在内存中是否存在这个类,也就是检查这个类是否已经被加载,如果没有加载,就会在parent class loader 里面去找。如果还找不到就会尝试着直接load这个类.

一下几个方法实现了一个简单的动态加载。自己扩展了一个简单的class loaderpackage com.yihaomen.loadclass;

import java.lang.reflect.Constructor;

import java.lang.reflect.Method;

public class JavaClassLoader extends ClassLoader {

public void invokeClassMethod(String classBinName, String methodName){

try {

// Create a new JavaClassLoader

ClassLoader classLoader = this.getClass().getClassLoader();

// Load the target class using its binary name

Class> loadedMyClass = classLoader.loadClass(classBinName);

System.out.println("Loaded class name: " + loadedMyClass.getName());

// Create a new instance from the loaded class

Constructor> constructor = loadedMyClass.getConstructor();

Object myClassObject = constructor.newInstance();

// Getting the target method from the loaded class and invoke it using its name

Method method = loadedMyClass.getMethod(methodName);

System.out.println("Invoked method name: " + method.getName());

method.invoke(myClassObject);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

另外再实现一个需要被动态加载的类

package com.yihaomen.loadclass;

public class MyClass {

public void sayHello() {

System.out.println("Hello world from the loaded class !!!");

}

}

测试动态加载类

package com.yihaomen.loadclass;

public class ClassLoaderTest extends JavaClassLoader {

public static void main(String[] args) {

JavaClassLoader javaClassLoader = new JavaClassLoader();

javaClassLoader.invokeClassMethod("com.yihaomen.loadclass.MyClass", "sayHello");

}

}

这样就能实现最基本的动态加载类,当然还有其他的方式,在后面继续测试从网络上加载一个类,还有从jar包里面加载需要的类.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值