wicket @SpringBean无法创建bean

我有一个关于Eclipse,Wicket,Spring,Hibernate的项目。 除了:当我尝试时,每件事都是正常的

public class SortableContactDataProvider extends SortableDataProvider { @SpringBean private Service service; public Iterator iterator(int first, int count) { //SortParam sp = getSort(); return service.findAllUsers().subList(0, 15).iterator(); } ... 

服务变量是null? 在我使用这个构造的任何其他地方,“服务”不是空的并且运行良好。 请帮我解决这个问题。

@SpringBean仅适用于Component的任何子类。

您需要在构造函数中执行以下操作

Wicket 1.4

  InjectorHolder.getInjector().inject(this); 

Wicket 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环境的新手来说,更多的上下文 – 正如bert所指出的那样,@ SpringBean只能在Component的任何Subclass中工作,所以你需要手动驱动注入。 这是一个两步过程:

在你的class级推动注射,如下:

 public class SortableContactDataProvider extends SortableDataProvider { @SpringBean private Service service; public SortableContactDataProvider(){ Injector.get().inject(this); // set up the injection } public Iterator 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)); } }