Hibernate Search:静态块调用 Version#touch() 的目的是什么
Hibernate Search: what is the purpose of static block calling Version#touch()
我正在查看 Hibernate Search 的源代码,无意中发现了一段我不太理解的代码。
有一个静态块调用了org.hibernate.search.engine.Version
class的静态方法。我怀疑它可能与 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 版本。
我正在查看 Hibernate Search 的源代码,无意中发现了一段我不太理解的代码。
有一个静态块调用了org.hibernate.search.engine.Version
class的静态方法。我怀疑它可能与 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 版本。