custom classloader
package test.frugalis;
public class Frugalis {
public void printMyName(){
System.out.println("Welcome Frugalis Minds");
}
}
custom classloader
package test.frugalis;
public class Frugalis {
public void printMyName(){
System.out.println("Welcome Frugalis Minds");
}
}
custom classloader
loader name---- sun.misc.Launcher$AppClassLoader
Class Loading Started for test.frugalis.Frugalis
*********Inside getClass*********
Name of Filetest\frugalis\Frugalis.class
<<<<<<<<<Inside loadClassData>>>>>>
Size of byte array 519
Class Loading Started for java.lang.Object
Loaded class name: test.frugalis.Frugalis
Class Loading Started for java.lang.System
Class Loading Started for java.io.PrintStream
Welcome Frugalis Minds
custom classloader
package test.main;
import java.io.DataInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class MyClassLoader extends ClassLoader {
public MyClassLoader(ClassLoader parent) {
super(parent);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
System.out.println("Class Loading Started for " + name);
if (name.startsWith("test")) {
return getClass(name);
}
return super.loadClass(name);
}
/**
* Loading of class from .class file
* happens here You Can modify logic of
* this method to load Class
* from Network or any other source
* @param name
* @return
* @throws ClassNotFoundException
*/
private Class<?> getClass(String name) throws ClassNotFoundException {
System.out.println("*********Inside getClass*********");
String file = name.replace('.', File.separatorChar) + ".class";
System.out.println("Name of File" + file);
byte[] byteArr = null;
try {
// This loads the byte code data from the file
byteArr = loadClassData(file);
System.out.println("Size of byte array "+byteArr.length);
Class<?> c = defineClass(name, byteArr, 0, byteArr.length);
resolveClass(c);
return c;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* Loads a given file and converts
* it into a Byte Array
* @param name
* @return
* @throws IOException
*/
private byte[] loadClassData(String name) throws IOException {
System.out.println("<<<<<<<<<Inside loadClassData>>>>>>");
InputStream stream = getClass().getClassLoader().getResourceAsStream(
name);
int size = stream.available();
byte buff[] = new byte[size];
DataInputStream in = new DataInputStream(stream);
// Reading the binary data
in.readFully(buff);
in.close();
return buff;
}
}
custom classloader
package test.main;
import java.lang.reflect.InvocationTargetException;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, Exception {
MyClassLoader loader = new MyClassLoader(
Test.class.getClassLoader());
System.out.println("loader name---- " +loader.getParent().getClass().getName());
//This Loads the Class we must always
//provide binary name of the class
Class<?> clazz =
loader.loadClass("test.frugalis.Frugalis");
System.out.println("Loaded class name: " + clazz.getName());
//Create instance Of the Class and invoke the particular method
Object instance = clazz.newInstance();
clazz.getMethod("printMyName").invoke(instance);
}
}
Copyright © 2021 Codeinu
Forgot your account's password or having trouble logging into your Account? Don't worry, we'll help you to get back your account. Enter your email address and we'll send you a recovery link to reset your password. If you are experiencing problems resetting your password contact us