Калитка @SpringBean не может создать боб
У меня есть проект на Eclipse, Wicket, Spring, Hibernate. Все работает нормально, кроме: когда я пытаюсь
public class SortableContactDataProvider extends SortableDataProvider<User>
{
@SpringBean
private Service service;
public Iterator<User> iterator(int first, int count)
{
//SortParam sp = getSort();
return service.findAllUsers().subList(0, 15).iterator();
}
...
служебная переменная равна нулю? В любых других местах, когда я использую эту конструкцию, "сервис" не является нулевым и работает хорошо. Пожалуйста, помогите мне решить эту проблему.
2 ответа
@SpringBean работает только в любом подклассе компонента.
Вы должны сделать следующее в вашем конструкторе
Калитка 1.4
InjectorHolder.getInjector().inject(this);
Калитка 1.5+
org.apache.wicket.injection.Injector.get().inject(this);
См. "Универсальная реализация IDataProvider" @ http://stronglytypedblog.blogspot.com/2009/03/wicket-patterns-and-pitfalls-1.html
наслаждаться
Немного больше контекста для тех, кто является новичком в среде Wicket/Spring - как отметил Берт, @SpringBean работает только в любом подклассе компонента, поэтому вам нужно будет управлять инжекцией вручную. Это двухэтапный процесс:
Проведите инъекцию в своем классе, что-то вроде:
public class SortableContactDataProvider extends SortableDataProvider<User>
{
@SpringBean
private Service service;
public SortableContactDataProvider(){
Injector.get().inject(this); // set up the injection
}
public Iterator<User> iterator(int first, int count)
{
return service.findAllUsers().subList(0, 15).iterator();
}
}
И убедитесь, что Injector настроен в приложении Wicket - что-то вроде:
public WicketApplication
@Override
protected void init() {
// make sure Spring injector is available and set up
getComponentInstantiationListeners().add(new SpringComponentInjector(this));
}
}