Hibernate Search:静态块调用 Version#touch() 的目的是什么

Hibernate Search: what is the purpose of static block calling Version#touch()

我正在查看 Hibernate Search 的源代码,无意中发现了一段我不太理解的代码。

有一个静态块调用了org.hibernate.search.engine.Versionclass的静态方法。我怀疑它可能与 JIT 有关但不确定如何。

你能解释一下吗?

public class ImmutableSearchFactory implements ExtendedSearchIntegratorWithShareableState, WorkerBuildContext {

    static {
        Version.touch();
    }

版本class:

public final class Version {

    private Version() {
        //now allowed
    }

    public static String getVersionString() {
        return Version.class.getPackage().getImplementationVersion();
    }

    static {
        LoggerFactory.make( MethodHandles.lookup() ).version( getVersionString() );
    }

    public static void touch() {
    }
}

这里是link到GihHub

如果 Version class 已经加载,Version.touch(); 将不会执行任何操作。

如果 Version class 没有加载,Version.touch(); 将触发加载,这反过来会触发 [=11] 中以下静态代码块的执行=] class:

    static {
        LoggerFactory.make( MethodHandles.lookup() ).version( getVersionString() );
    }

...这将记录 Hibernate Search 版本。

因此调用 Version.touch(); 只是为了确保在 Hibernate Search 启动之前记录 Hibernate Search 版本。