我正在开发一个用于实用程序的 jar 库。
我想显着减少对外部 jars/库的依赖,但如果它存在于类路径中,则为此类库提供本机支持。
例如,我希望库提供与 hibernate 一起使用的例程;但是,如果休眠 jar 不存在,我不希望应用程序因错误而死。
有没有办法实现这一点,而不必将休眠 jar 与我的库捆绑在一起?
在初始化期间,您可以使用Class.forName
查找 Hibernate 类之一,如果它抛出一个ClassNotFoundException
catch 并且您知道 Hibernate 不在环境中 - 设置一个标志,以便您知道不要做特定于 Hibernate 的事情。
但是请注意,如果您的任何类静态引用了 Hibernate 类(例如 via import
),如果 Hibernate 不在类路径中,这些类将不会加载。通常的处理方法是:
HibernateStuff
.import
.HibernateStuffImpl
. 那个类可以import
休眠的东西。Class.forName
),使用Class.forName
加载您的HibernateStuffImpl
然后使用Class#newInstance
创建它的实例,将其分配给 type 的变量HibernateStuff
。HibernateStuffStub
通过什么都不做来实现接口的类,并在未加载 Hibernate 时使用它,因此您的代码不会充满条件语句。(JVM 在无操作调用方面非常快。)...当然,以上所有内容都适用于任何事物,而不仅仅是 Hibernate。