我们在配置 lambdaj 以使用 Joda Time 时遇到问题。由于LocalDate
是最终类,Lambdaj 需要如下初始化:(参见 bug 70)
public class LocalDateArgumentCreator implements FinalClassArgumentCreator<LocalDate> {
private final long MSECS_IN_DAY = 1000L * 60L * 60L * 24L;
public LocalDate createArgumentPlaceHolder(int seed) {
return new LocalDate((long)seed * MSECS_IN_DAY);
}
}
ArgumentsFactory.registerFinalClassArgumentCreator(LocalDate.class, new LocalDateArgumentCreator());
由于我们需要将此配置应用到几乎所有地方,因此我们缺乏如何实现此配置的选项。我们的应用程序是一个基于 Spring 和 Wicket 的 Web 应用程序。
我提出了三种不同的选择:
1.核心maven模块中的静态初始化块
由于核心模块包含在所有其他模块中,因此所有模块都将包含该类。剩下的问题是,即使没有对目标类的引用,静态块是否总是被初始化?
例子
public final class LambdajInitializer {
static {
// initialize like above
}
}
2.一个初始化beanapplicationContext.xml
缺点:永远不会为非 Spring 测试初始化
示例:在 applicationContext-core.xml 中(包含在每个模块中)
<bean class="...LambdajInitializer" />
public class LambdajInitializer {
@PostConstruct
public void init() {
// Lambdaj initialization
}
}
3. 对 Wicket 应用程序类中的初始化方法的调用
缺点:永远不会在 web 模块之外初始化
public class MyApplication extends WebApplication {
@Override
public void init() {
...
// Lambdaj initialization
...
}
}
我的问题是:实现这一目标的最佳方法是什么?