У нас есть проблема с настройкой lambdaj для работы с Joda Time. Поскольку LocalDate
является окончательным классом, Lambdaj должен быть инициализирован следующим образом: (см. Ошибку 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.
Я придумал три разных варианта:
1. Статический блок инициализации в основном модуле maven
Поскольку основной модуль включен в каждый другой модуль, все модули будут включать класс. Остается вопрос, что статические блоки всегда инициализируются, даже если ссылки на целевой класс отсутствуют?
Пример
public final class LambdajInitializer {
static {
// initialize like above
}
}
2. Инициализация bean в applicationContext.xml
Даунсайд: никогда не инициализируется для тестов Spring
Пример: В applicationContext-core.xml(входит в каждый модуль)
<bean class="...LambdajInitializer" />
public class LambdajInitializer {
@PostConstruct
public void init() {
// Lambdaj initialization
}
}
3. Вызов метода инициализации в классе приложения Wicket
Даунсайд: никогда не инициализируется вне веб-модуля
public class MyApplication extends WebApplication {
@Override
public void init() {
...
// Lambdaj initialization
...
}
}
Мой вопрос: что является предпочтительным способом достижения этого?