Je veux instancier deux applications serveur TCP dans la même méthode principale. Ces classes de serveur utilisent beaucoup de champs locaux statiques et thread. Est-il possible de charger des classes comme dans un domaine d'application différent?en utilisant classloader pour isoler deux classes statiques
c'est mon cas de test:
classe testeur a getter simples et méthodes de réglage pour le réglage objet statique global.
public class Tester {
public Tester() {
System.out.println(getClass().getClassLoader());
}
public void setText(String text) {
GlobalObject.globalText = text;
}
public String getText() {
return GlobalObject.globalText;
}
}
C'est l'objet global qui est accessible depuis partout. Je veux limiter l'accès à cet objet.
public class GlobalObject {
public static String globalText;
}
Ceci est mon programme de test.
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();
}
}
}
Le ouput est:
[email protected]
test
[email protected]
test
[email protected]
test
La sortie que je veux:
[email protected]
test
[email protected]
test
[email protected]
null
Je ne peux pas suggérer assez fortement que vous abandonniez la statique mutable et les threads locaux au profit d'un code bien écrit! [ajouter onze à votre goût] –