Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Lambdaj FinalClassArgumentCreators的应用程序范围配置。在哪里以及如何做?_Java_Spring_Static_Static Initialization_Lambdaj - Fatal编程技术网

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

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 这是一种合理的方法,您可

我们在配置lambdaj与Joda Time一起工作时遇到问题。由于
LocalDate
是最后一个类,Lambdaj需要如下初始化:()

2.
applicationContext.xml
缺点:对于非Spring测试,永远不会初始化

示例:在applicationContext-core.xml中(包含在每个模块中)

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

  • 我会避免
    静态
    初始化,因为将来您可能会有(调用的可能性有多大)不需要这种初始化的模块。我不喜欢
    static
    inits
  • 这是一种合理的方法,您可以将此初始化放在非spring单元测试的
    @之前
  • 与2类似,您可以在
    @Before
    部分中初始化代码

  • 备选案文4。您可以创建一个仅测试的Spring配置类/文件,并使用
    @ContextConfiguration
    将其传递给您的测试。我们得出以下结论:

  • 对于应用程序的运行时,我们在Wicket应用程序类的
    init()
    方法中初始化Lambdaj的
    FinalClassArgumentCreator
    s。通过这种方式,几乎可以肯定,它们是在任何Lambdaj使用之前被初始化的
  • 为了测试Wicket组件和页面,我们创建了自己的
    TestApplication
    类,它使用与生产应用程序相同的初始化代码
  • 对于独立的批处理作业,我们决定不使用Lambdaj。如果我们以后决定使用它,我们可能会将初始化提取到Spring将实例化的类

  • 你错过了这个问题…是的,不小心发布得太早了。我不太担心测试而不是生产代码。如果在测试中没有完成初始化,它们将失败,在本例中,在
    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
            ...
        }
    }