diff options
Diffstat (limited to '')
3 files changed, 119 insertions, 0 deletions
diff --git a/sandbox/slaws/classloader/src/main/java/cl/CustomClassLoader.java b/sandbox/slaws/classloader/src/main/java/cl/CustomClassLoader.java new file mode 100644 index 0000000000..050b770eab --- /dev/null +++ b/sandbox/slaws/classloader/src/main/java/cl/CustomClassLoader.java @@ -0,0 +1,83 @@ +package cl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class CustomClassLoader extends ClassLoader
+{
+ public CustomClassLoader(){
+ super(CustomClassLoader.class.getClassLoader());
+ }
+
+ public Class loadClass( String name, boolean resolve )
+ throws ClassNotFoundException {
+ // Our goal is to get a Class object
+ Class clazz = null;
+
+ // First, see if we've already dealt with this one
+ clazz = findLoadedClass(name);
+
+ String fileStub = name.replace( '.', '/' );
+ String classFilename = "target/classes/" + fileStub+".class";
+
+ try {
+ // read the bytes
+ byte raw[] = getBytes( classFilename );
+ // try to turn them into a class
+ clazz = defineClass( name, raw, 0, raw.length );
+ } catch( IOException ex ) {
+ // This is not a failure! If we reach here, it might
+ // mean that we are dealing with a class in a library,
+ // such as java.lang.Object
+ }
+
+ // Maybe the class is in a library -- try loading
+ // the normal way
+ if (clazz==null) {
+ clazz = findSystemClass( name );
+ }
+
+ // Resolve the class, if any, but only if the "resolve"
+ // flag is set to true
+ if (resolve && clazz != null) {
+ resolveClass( clazz );
+ }
+
+ // If we still don't have a class, it's an error
+ if (clazz == null) {
+ throw new ClassNotFoundException( name );
+ }
+
+ return clazz;
+ }
+
+ // Given a filename, read the entirety of that file from disk
+ // and return it as a byte array.
+ private byte[] getBytes( String filename ) throws IOException {
+ // Find out the length of the file
+ File file = new File( filename );
+ long len = file.length();
+
+ // Create an array that's just the right size for the file's
+ // contents
+ byte raw[] = new byte[(int)len];
+
+ // Open the file
+ FileInputStream fin = new FileInputStream( file );
+
+ // Read all of it into the array; if we don't get all,
+ // then it's an error.
+ int r = fin.read( raw );
+
+ if (r != len) {
+ throw new IOException( "Can't read all, "+r+" != "+len );
+ }
+
+ // Don't forget to close the file!
+ fin.close();
+
+ // And finally return the file contents as an array
+ return raw;
+ }
+}
diff --git a/sandbox/slaws/classloader/src/main/java/patha/SomeClassA.java b/sandbox/slaws/classloader/src/main/java/patha/SomeClassA.java new file mode 100644 index 0000000000..bf9c8f012f --- /dev/null +++ b/sandbox/slaws/classloader/src/main/java/patha/SomeClassA.java @@ -0,0 +1,15 @@ +package patha;
+
+
+
+public class SomeClassA {
+
+
+
+ public SomeClassA() {
+ }
+
+ public void doSomething(SomeClassB someClassB) {
+ System.out.println(someClassB.getSomeString());
+ }
+}
diff --git a/sandbox/slaws/classloader/src/main/java/patha/SomeClassB.java b/sandbox/slaws/classloader/src/main/java/patha/SomeClassB.java new file mode 100644 index 0000000000..e4b9302055 --- /dev/null +++ b/sandbox/slaws/classloader/src/main/java/patha/SomeClassB.java @@ -0,0 +1,21 @@ +package patha;
+
+
+
+public class SomeClassB {
+
+ String someString;
+
+ public SomeClassB() {
+ this.someString = "Default String";
+ }
+
+ public void setSomeString(String someString) {
+ this.someString = someString;
+ System.out.println(someString);
+ }
+
+ public String getSomeString() {
+ return someString;
+ }
+}
|