我们在配置lambdaj与Joda Time一起工作时遇到了问题。由于2.在
LocalDate
是一个final类,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.在applicationContext.xml
中的初始化bean
缺点:对于非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
...
}
}
我的问题是:哪种方法更好地实现了这个目标?