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

标签 java spring static static-initialization lambdaj

我们在配置 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/

相关文章:

java - 关于整数比较的澄清?

Java保留对象的实例并保留对象的索引

java - 我无法将 css 文件链接到我的元素

c# - C# 中的私有(private)静态变量和线程安全

http - Spring过滤器看不到静态页面请求的状态码

java - 我想从图库中选择多个图像,但是选择图像后,当我单击“打开”时崩溃

java - 如何制作可点击的 ListView

java - Spring 安全5 : No Beans of type BCryptPasswordEncoder found

java - 从 Spring Boot 1.4 应用程序导入 Maven 依赖项

c# - 使用 ModuleBuilder 将类标记为 `internal static`