How does Wicket's @SpringBean
annotation work? Does it use reflection at run time? Does it make the compiler inject some code? Or what?

- 1,167
- 3
- 11
- 17
-
1There is no `@SpringBean` annotation in the Spring API. There is one in Wicket, though, is that what you're using? – skaffman Dec 23 '09 at 12:08
-
1Ah, I didn't know that - yes I am using Wicket. I'll change the question and tags to reflect that. Thanks. – Tarquila Dec 23 '09 at 13:08
-
@Tarquila - I think it's easier to fix this question for spring. And add a new one for Wicket. – Thomas Jung Dec 23 '09 at 13:38
-
3I think the accepted answer for this question should be changed. @skaffman's answer seems to be the true correct answer. – Snekse Dec 15 '11 at 16:24
3 Answers
@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.
-
3To use this one only needs to add the SpringComponentInjector listener to the Wicket application to listen to component instantiations. – Matt Jan 09 '10 at 01:09
The class marked with a @SpringBean annotation has to have one of:
- A no-args constructor
- A superclass with a no-args constructor
- Implement an interface
An exception will be thrown if these conditions are not met as Wicket will not be able to proxy the class.

- 63
- 1
- 3
-
1this is useful information but not really an answer to the question. it might be better as a comment the question or another answer. – Martin Serrano Oct 26 '12 at 23:59
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.

- 32,428
- 9
- 84
- 114
-
5This mechanism doesn't have anything to do with `@SpringBean`, though, which is a Wicket construct, not a Spring one. – skaffman Dec 23 '09 at 13:16
-
I've never used Wicket. I thought he meant the @Component etc. annotations. Good to know. – Thomas Jung Dec 23 '09 at 13:35