【发布时间】:2012-03-23 08:13:00
【问题描述】:
在我的 OSGi 环境中,我正在尝试预加载数据库驱动程序以供进一步使用。通常,可以这样做:
Class.forName("com.mysql.jdbc.Driver");
之后,可以创建连接。但是,如果我在 Felix 下的 OSGi 中使用它,他说找不到该类 (ClassNotFoundException) 并且无法创建连接。但是当我做这样的事情时(try-catch 被省略):
com.mysql.jdbc.Driver d = new com.mysql.jdbcDriver
Class.forName("com.mysql.jdbc.Driver");
然后一切正常并创建连接。但是,这不是很漂亮,因为无法交换驱动程序类。
有没有办法用第一种方法加载类?我假设我必须提供正确的类加载器。但是我从哪里得到呢?
MySQL 驱动程序作为 OSGi 包装包提供。
【问题讨论】:
-
如果您的源代码中有类名,则永远不需要使用 Class.forName 加载类动态。仅当您通过运行时机制获取类名时,才应使用动态类加载。
标签: java osgi classloader apache-felix bnd