How does Wicket's @SpringBean annotation work? How does Wicket's @SpringBean annotation work? spring spring

How does Wicket's @SpringBean annotation work?


@SpringBean works using Wicket's underlying Injector mechanism. When you instantiate a Wicket component, the constructor of Wicket's component base class introspects the class being instantiated, looking for the @SpringBean annotation. If the bean is found, then Wicket generates a proxy for the spring bean and injects it into the component's field. This is Wicket's equivalent of Spring's @Autowired annotation, the effect is similar.

It doesn't, however, have anything to do with Spring's own context/classpath scanning functionality (e.g. @Component), which is about auto-discovery of what is and isn't a bean, rather having anything to do with wiring.


The class marked with a @SpringBean annotation has to have one of:

  1. A no-args constructor
  2. A superclass with a no-args constructor
  3. Implement an interface

An exception will be thrown if these conditions are not met as Wicket will not be able to proxy the class.


Spring uses the class loader and ASM at runtime to find all annotated classes.

You can configure where spring should search for beans:

<context:component-scan base-package="some.package.to.start.from"/>

This uses the ClassPathBeanDefinitionScanner internally which will use the PathMatchingResourcePatternResolver to find the classes and the ASM-based MetadataReader to read the annotations.