Java Lambdaj FinalClassArgumentCreators的应用程序范围配置。在哪里以及如何做?
我们在配置lambdaj与Joda Time一起工作时遇到问题。由于Java Lambdaj FinalClassArgumentCreators的应用程序范围配置。在哪里以及如何做?,java,spring,static,static-initialization,lambdaj,Java,Spring,Static,Static Initialization,Lambdaj,我们在配置lambdaj与Joda Time一起工作时遇到问题。由于LocalDate是最后一个类,Lambdaj需要如下初始化:() 2.applicationContext.xml 缺点:对于非Spring测试,永远不会初始化 示例:在applicationContext-core.xml中(包含在每个模块中) 我的问题是:实现这一目标的最佳方式是什么 我会避免静态初始化,因为将来您可能会有(调用的可能性有多大)不需要这种初始化的模块。我不喜欢staticinits 这是一种合理的方法,您可
LocalDate
是最后一个类,Lambdaj需要如下初始化:()
2.applicationContext.xml
缺点:对于非Spring测试,永远不会初始化
示例:在applicationContext-core.xml中(包含在每个模块中)
我的问题是:实现这一目标的最佳方式是什么
静态
初始化,因为将来您可能会有(调用的可能性有多大)不需要这种初始化的模块。我不喜欢static
inits@之前
@Before
部分中初始化代码备选案文4。您可以创建一个仅测试的Spring配置类/文件,并使用
@ContextConfiguration
将其传递给您的测试。我们得出以下结论:
init()
方法中初始化Lambdaj的FinalClassArgumentCreator
s。通过这种方式,几乎可以肯定,它们是在任何Lambdaj使用之前被初始化的TestApplication
类,它使用与生产应用程序相同的初始化代码你错过了这个问题…是的,不小心发布得太早了。我不太担心测试而不是生产代码。如果在测试中没有完成初始化,它们将失败,在本例中,在
LocalDate
s上使用Lambdaj操作时会失败。问题是,单元测试可能无法发现问题,因为它在某种程度上取决于执行顺序(在生产环境集群中,另一台服务器失败,而另一台没有)。
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());
public final class LambdajInitializer {
static {
// initialize like above
}
}
<bean class="...LambdajInitializer" />
public class LambdajInitializer {
@PostConstruct
public void init() {
// Lambdaj initialization
}
}
public class MyApplication extends WebApplication {
@Override
public void init() {
...
// Lambdaj initialization
...
}
}