Инъекция зависимости от калитки работает с классами, реализующими IComponentInstantiationListener. Эти слушатели уровня приложения вызываются всякий раз, когда создается экземпляр Компонента. Этот хук используется для внедрения зависимостей компонентов.
В модельных классах такой механизм отсутствует. Любая модель может напрямую реализовывать IModel, поэтому в отличие от Component не существует абстрактного базового класса, который может вызывать прослушиватели.
Я использую следующий базовый класс для своих инъекционных моделей (Wicket 1.5):
public abstract class InjectedDetachableModel<T> extends LoadableDetachableModel<T> {
public InjectedDetachableModel() {
Injector.get().inject(this);
}
public InjectedDetachableModel(T a_entity) {
super(a_entity);
Injector.get().inject(this);
}
}
Редактировать :
Сводка значимых различий между 1.4 и 1.5, взята из Руководство по миграции Wicket 1.5 :
Калитка 1,4
@Override
protected void init()
{
// initialize Spring
addComponentInstantiationListener(new SpringComponentInjector(this, applicationContext));
}
и
InjectorHolder.getInjector().inject(Object object)
Калитка 1,5:
@Override
protected void init()
{
// initialize Spring
getComponentInstantiationListeners().add(new SpringComponentInjector(this, applicationContext))
}
и
Injector.get().inject(Object object)