12

@SpringBeanWicket 的注解是如何工作的?它在运行时使用反射吗?它会让编译器注入一些代码吗?或者是什么?

4

3 回答 3

29

@SpringBean使用 Wicket 的底层 Injector 机制工作。当您实例化一个 Wicket 组件时,Wicket 组件基类的构造函数会内省被实例化的类,并寻找@SpringBean注解。如果找到了 bean,那么 Wicket 会为 spring bean 生成一个代理并将其注入到组件的字段中。这是Wicket相当于Spring的@Autowired注解,效果差不多。

然而,它与 Spring 自己的上下文/类路径扫描功能(例如@Component)没有任何关系,它是关于自动发现什么是和不是 bean,而不是与布线有关。

于 2009-12-23T13:21:17.183 回答
5

标有 @SpringBean 注释的类必须具有以下之一:

  1. 无参数构造函数
  2. 具有无参数构造函数的超类
  3. 实现一个接口

如果不满足这些条件,则会引发异常,因为 Wicket 将无法代理该类。

于 2012-02-11T10:36:19.460 回答
0

Spring 在运行时使用类加载器和 ASM 来查找所有带注释的类。

您可以配置spring 应该在哪里搜索 bean:

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

这在内部使用ClassPathBeanDefinitionScanner,它将使用PathMatchingResourcePatternResolver来查找类,并使用基于 ASM 的MetadataReader来读取注释。

于 2009-12-22T16:27:30.430 回答