我有一个扩展 Jscience 的 SystemOfUnits 的类来定义一些自定义单位。我希望这个类甚至在调用任何对方法 Unit.valueOf() 的调用之前就由 JVM 加载。
如果该类未在 JVM 中加载,则下面的调用失败为java.text.ParseException: dz not Recognized (in dz at index 0)
Unit.valueOf("dz");
-
public final class CustomUnits extends SystemOfUnits {
...
private static HashSet<Unit<?>> UNITS = new HashSet<Unit<?>>();
public static final Unit<Dimensionless> DOZEN = customUnits(Unit.ONE
.times(12));
public static final Unit<Dimensionless> PIECE = customUnits(DOZEN
.divide(12));
static {
UnitFormat.getInstance().label(CustomUnits.DOZEN, "dz");
UnitFormat.getInstance().label(CustomUnits.PIECE, "pcs");
}
@Override
public Set<Unit<?>> getUnits() {
return Collections.unmodifiableSet(UNITS);
}
....
}
另请注意,此类将成为公共 jar 的一部分,该 jar 将作为对其他主要应用程序的依赖项可用,并且我不希望每个用户都被告知应在调用 Unit.valueOf() 之前在某处引用此类。
当包含自定义类的 jar 作为依赖项加载时,寻找可以加载类的可能选项。
想知道spring bean初始化会有所帮助。