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