Dire. Le pilote jdbc a besoin de Class.forName pour exécuter un bloc statique d'une classe. Pourquoi ne pas simplement l'exécuter en tant que champ de classe?Pourquoi java a besoin de Class.forName ou de chargement dynamique?
Répondre
Class.forName()
est garanti pour initialiser la classe au moment où vous l'appelez. Comment proposeriez-vous de le faire? Pourriez-vous simplement déclarer une variable locale sans l'affecter, comme com.foo.Driver d;
? Que diriez-vous d'en faire une variable membre à la place? Devriez-vous l'assigner? Que dit la spécification sur comment et quand une classe doit être chargée? Voulez-vous vraiment avoir à penser à cela, ou simplement appeler Class.forName()
?
Sur le même sujet, il est plus nécessaire de le faire avec beaucoup de pilotes JDBC. Le DriverManager now uses the ServiceLoader mechanism pour identifier et charger les classes de pilotes conformes.
Il est technique peu pratique à utiliser pour charger les pilotes JDBC autres que la réflexion. (Bien qu'il existe différentes façons de le faire). Il y a beaucoup de pilotes JDBC et le code d'implémentation peut ne pas être disponible pour l'application.
L'idée de JDBC est de ne pas dépendre d'un conducteur ou la mise en œuvre spécifique. L'idée est que vous pouvez utiliser JDBC et configurer à l'exécution tout pilote disponible. Pour ce faire, vous devez charger le pilote par son nom et utiliser les méthodes JDBC. Malheureusement, JDBC ne fait pas abstraction de toutes les différences entre les bases de données, comme les codes d'erreur, et le passage à une base de données que vous n'avez pas testée peut ne pas être une bonne idée.
Vous pourriez considérer que pour toutes vos bibliothèques, vous les avez disponibles au moment de la compilation et vous ne changeriez pas la base de données sur un wim, sans un minimum de re-test et de redéploiement de votre application. Dans ce cas, la liaison à un pilote spécifique (au lieu d'utiliser Class.forName) peut être une bonne chose car elle vous obligerait (ou quiconque le fait) à réfléchir davantage au changement et à suivre vos procédures de test.
- 1. Problème avec Java Class.forName
- 2. Chargement de classe dynamique
- 3. Java Class.forName échouant
- 4. Chargement de classe dynamique - Java
- 5. Le chargement de classe dynamique par Class.forName fonctionne avec des noms de classe simples
- 6. Class.forName projette
- 7. Java a besoin de conseils
- 8. Chargement de classe dynamique en Java (énumération)
- 9. La méthode Java Class.forName() stagne puis quitte
- 10. Java AOT + chargement dynamique des classes java
- 11. Chargement dynamique de fichiers Java Script
- 12. Chargement de classe dynamique avec Java
- 13. Chargement dynamique de JWplayer
- 14. Pourquoi BizTalk a besoin de MSDTC?
- 15. Chargement dynamique de NIB?
- 16. Chargement dynamique de l'image
- 17. Comment obtenir des méthodes de Class.forName() en Java?
- 18. effacer la classe chargée via class.forName en java
- 19. Chargement dynamique de l'assemblage: pourquoi ce code fonctionne-t-il?
- 20. Chargement dynamique de javascripts
- 21. Chargement dynamique de l'image.
- 22. Chargement de script dynamique
- 23. Chargement dynamique Silverlight: Xap ou Dll?
- 24. Class.forName (...) Vs. Comportements Thread.currentThread.getContextClassLoader.loadClass (...)
- 25. android Class.forName jette l'exception
- 26. Java - Comment le chargement de jar dynamique est-il exploitable?
- 27. Chargement dynamique de la DLL
- 28. Android. Chargement de classes dynamique et interfaces Java
- 29. Sbt: pourquoi a-t-il besoin de scala-lang 2.10.3?
- 30. De combien de mémoire Java a-t-il besoin?