Tôi có một số lớp A
:Java ClassLoader thay đổi
public class A {
public A(String str) {
System.out.println("Create A instance: " + str);
}
public void methodA() {
System.out.println("#methodA1()");
}
}
Và thực hiện lớp loader của tôi:
public class MyClassLoader extends ClassLoader {
public MyClassLoader() {
super();
}
@Override
public synchronized Class<?> loadClass(String name)
throws ClassNotFoundException {
System.out.println("Load: " + name);
return super.loadClass(name);
}
}
Và bây giờ tôi cố gắng thay đổi default class loader trong chủ đề hiện tại:
import java.util.ArrayList;
import java.util.List;
public class ChangeLoaderTest {
public static void main(String[] args) {
// Save class loader so that we can restore later.
ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
MyClassLoader newLoader = new MyClassLoader();
try {
// Set new classloader.
Thread.currentThread().setContextClassLoader(newLoader);
// My class.
A a = new A("1");
a.methodA();
// Standard Java class.
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(3);
} finally {
// Restore.
Thread.currentThread().setContextClassLoader(oldLoader);
}
}
}
Và ChangeLoaderTest
đầu ra:
Create A instance: 1
#methodA1()
Không ai
Load: ...
Tại sao? Làm thế nào tôi có thể thay đổi ClassLoader
thành một số chủ đề?
* "Tôi có một số loại A:" * Tôi đã chán. Không, điều đó không đúng, nhưng tôi sẽ không tiếp tục đọc. Trong khi một số người nghĩ tốt hơn là 'trừu tượng một vấn đề' đến mức bạn có thể diễn tả nó như những biểu tượng khó hiểu, tôi thích một số ngữ cảnh giúp giải thích những gì trong lớp 'A' khiến bạn muốn tải nó một cách năng động. I E. lớp 'A' có thể là' UserDefinedPlugIn' - cái sau cung cấp một số ngữ cảnh, cái cũ thì không. –
Ok, tôi có thể giải thích ngữ cảnh của câu hỏi này. Tôi có lớp đọc hình ảnh vào 'BufferedImage'. Đôi khi nó là 'ImageIO.read (file)', đôi khi nó là 'Sanselan.getBufferedImage (file)'.Tôi có lớp của riêng mình để lưu hình ảnh và tôi nên tạo 'BuffredImage' từ tệp, sau đó sao chép dữ liệu từ' BufferedImage' vào đối tượng của tôi. Tôi muốn sử dụng một số lớp proxy để bắt tất cả các phương thức '#get (...)' gọi để lưu thông tin trong đối tượng của tôi. – dzav