Как преобразовать следующий пример для использования одного из пакетов интеграции wicket / IOC?
Я хочу изучить и понять шаблон DI / IOC.Я много читал об этом, но мне было трудно понять, не углубляясь в пример кода.У меня есть пример полной работающей панели Wicket, которую, я думаю, я хочу преобразовать в DI.
Панель - это, по сути, редактор веб-интерфейса для списка.Он принимает IPanelFactory в качестве аргумента конструктора.Конструктор создает список (DefaultRefreshingView), и фабрика панелей знает, как создать ViewPanel для каждой строки.PanelFactory также знает, как создать форму добавления для добавления нового элемента в список.
Я выделю много кода, чтобы понять суть того, что я считаю уместным:
public interface IPanelFactory<T extends DomainEntity, U extends DomainEntity>
extends IDetachable {
IAddItemPanel<T, U> newAddItemPanel(String id);
Component newEditPanel(ViewPanel.ViewPanelParameters<T> parms);
Component newListPanel(String id, IModel<Collection<T>> listModel);
}
public class ListEditorPanel2<T extends DomainEntity, U extends DomainEntity>
extends Panel implements IHeaderContributor {
private static final long serialVersionUID = 1L;
private final IPanelFactory<T, U> panelFactory;
public ListEditorPanel2(String id, IModel<Collection<T>> listModel,
final IPanelFactory<T, U> panelFactory) {
super(id, listModel);
this.panelFactory = panelFactory;
final AjaxCell listCell = new AjaxCell("listCell");
DefaultRefreshingView<T> itemList = new DefaultRefreshingView<T>(
"itemList", listModel) {
@Override
protected void populateItem(final Item<T> item) {
Component editPanel = ListEditorPanel2.this.panelFactory
.newEditPanel(new ViewPanelParameters<T>("viewPanel",
item.getModel(), new EditPanelCallback(item)));
item.add(editPanel);
}
};
listCell.add(itemList);
add(listCell);
final IAddItemPanel<T, U> addItemPanel = panelFactory
.newAddItemPanel("addItemForm");
add((Component) addItemPanel);
Form<T> form = addItemPanel.getForm();
}
}
Каждая реализация IPanelFactory предоставляет различные компоненты для разделов «Просмотр» и «Добавление».Может быть несколько экземпляров ListEditorPanel2, которые используют разные реализации фабрики в одной и той же иерархии страниц.
Я думаю, что я хочу, чтобы IPanelFactory была внедренной зависимостью.Итак ...
- Это хороший вариант использования для DI / IOC, или нет смысла использовать его здесь?
- Как бы я сделал это "вручную"без использования контейнера IOC?(Я уже делаю это?)
- Какую интеграцию wicket-IOC мне следует использовать?Я использую калитку 1.4.8 в настоящее время.Я собирался попробовать wicket-spring-annot, но похоже, что этот проект устарел.
- Как мне настроить контейнер IOC для этого для моих компонентов калитки?