gpt4 book ai didi

java - Lambdaj FinalClassArgumentCreators 的应用程序范围的配置。在哪里以及如何做?

转载 作者:IT老高 更新时间:2023-10-28 13:47:30 26 4
gpt4 key购买 nike

我们在配置 lambdaj 以使用 Joda Time 时遇到问题。由于 LocalDate 是 final 类,Lambdaj 需要像下面这样初始化:( see 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 模块中的静态初始化 block

由于核心模块包含在所有其他模块中,因此所有模块都将包含该类。剩下的问题是,即使没有对目标类的引用,静态 block 总是会被初始化吗?

例子

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
...
}
}

我的问题是:实现这一目标的最佳方法是什么?

最佳答案

  1. 我会避免 static 初始化,因为您将来可能拥有(您的调用可能性不大)不需要这种初始化的模块。我不喜欢 static 初始化。
  2. 这是一种合理的方法,您可以将此初始化放在非 Spring 单元测试的 @Before 部分中
  3. 与 2. 一样,您可以在 @Before 部分中初始化代码。

选项 4。您可以创建一个仅用于测试的 Spring 配置类/文件,并使用 @ContextConfiguration

将其传递给您的测试

关于java - Lambdaj FinalClassArgumentCreators 的应用程序范围的配置。在哪里以及如何做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com