Я хочу создать экземпляр двух приложений TCP-сервера одним и тем же основным методом. Эти серверные классы используют множество статических и потоковых локальных полей. Есть ли возможность загружать классы, как в другом домене приложения?using classloader для изоляции двух статических классов
это мой тест:
Tester класс имеет простые методы получения и установки для установки глобального статического объекта.
public class Tester {
public Tester() {
System.out.println(getClass().getClassLoader());
}
public void setText(String text) {
GlobalObject.globalText = text;
}
public String getText() {
return GlobalObject.globalText;
}
}
Это глобальный объект, доступный из любого места. Я хочу ограничить доступ к этому объекту.
public class GlobalObject {
public static String globalText;
}
Это моя тестовая программа.
public class Main {
public static void main(String[] args) {
// Default class loader;
Tester ta1 = new Tester();
ta1.setText("test");
System.out.println(ta1.getText());
Tester ta2 = new Tester();
System.out.println(ta2.getText());
// Custom class loader;
CustomClassLoader ccl = new CustomClassLoader();
try {
Tester tb = (Tester) ccl.loadClass("Tester").newInstance();
System.out.println(tb.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
выводе является:
[email protected]
test
[email protected]
test
[email protected]
test
Выходной сигнал, что я хочу:
[email protected]
test
[email protected]
test
[email protected]
null
Я не могу предложить достаточно сильно, чтобы вы отказались от изменчивой статики и местных жителей в пользу хорошо написанного кода! [добавить один десятый на свой вкус] –