RJo*_*RJo 11 java spring static static-initialization lambdaj
我们在配置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());
Run Code Online (Sandbox Code Playgroud)
由于我们需要在几乎所有地方应用此配置,因此我们缺乏如何实现此配置的选项.我们的应用程序是基于Spring和Wicket的Web应用程序.
我提出了三种不同的选择:
由于核心模块包含在每个其他模块中,因此所有模块都包含该类.剩下的问题是,即使没有对目标类的引用,静态块总是会被初始化吗?
例
public final class LambdajInitializer {
static {
// initialize like above
}
}
Run Code Online (Sandbox Code Playgroud)
applicationContext.xml缺点:从未对非Spring测试进行初始化
示例:在applicationContext-core.xml中(包含在每个模块中)
<bean class="...LambdajInitializer" />
public class LambdajInitializer {
@PostConstruct
public void init() {
// Lambdaj initialization
}
}
Run Code Online (Sandbox Code Playgroud)
缺点:永远不会在Web模块之外进行初始化
public class MyApplication extends WebApplication {
@Override
public void init() {
...
// Lambdaj initialization
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:实现这一目标的首选方法是什么?
我们得出以下结论:
FinalClassArgumentCreator在 Wicket Application 类的init()方法中初始化 Lambdaj。这样,它们几乎肯定会在任何 Lambdaj 使用之前被初始化。TestApplication类,该类使用与生产应用程序相同的初始化代码。| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |