开发者

How does Wicket's @SpringBean annotation work?

How does Wicket's @SpringBean annotation work? Does it use reflection at run time? Does it make the compiler inject some code开发者_如何学C? Or what?


@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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜