java - hibernate 搜索 : what is the purpose of static block calling Version#touch()

标签 java hibernate hibernate-search

我正在研究 Hibernate Search 的源代码,并偶然发现了一段我不太理解的代码。

有一个静态 block 调用 org.hibernate.search.engine.Version 的静态方法类(class)。我怀疑它可能与 JIT 有关,但不确定如何。

能解释一下吗?

public class ImmutableSearchFactory implements ExtendedSearchIntegratorWithShareableState, WorkerBuildContext {

    static {
        Version.touch();
    }

版本类别:

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() {
    }
}

这里是GihHub的链接

最佳答案

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

如果Version类未加载,Version.touch();将触发加载,进而触发以下静态代码块的执行在 Version 类中:

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

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

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

关于java - hibernate 搜索 : what is the purpose of static block calling Version#touch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971299/

相关文章:

java - hibernate 搜索: exact phrase matching

java - 使用 JPanels 列表制作表格(使用百分比大小列)

java - JAVA组合生成器

java - phpBB论坛自动登录和搜索

java - Hibernate 在一对多映射上添加 where 子句

java - 如何将 hibernate-search 与 JBoss datagrid 一起使用?

java - 无法通过自定义 FieldBridge 实现找到字段

java - 如何在 JMapViewer 中的两点之间放置像箭头一样的图像

java - Spring、JPA、Hibernate 3 vs 4

java - 在每个类继承的 hibernate 表中使用多个选择而不是联合