Wicket的@SpringBean
注释如何工作?它是否在运行时使用反射?它是否会使编译器注入一些代码?或者是什么?
答案 0 :(得分:28)
@SpringBean
使用Wicket的underlying Injector mechanism。当您实例化Wicket组件时,Wicket组件基类的构造函数会内省正在实例化的类,以查找@SpringBean
注释。如果找到了bean,那么Wicket会为spring bean生成一个代理并将其注入组件的字段中。这是Wicket相当于Spring的@Autowired
注释,效果类似。
然而,它与Spring自己的上下文/类路径扫描功能(例如@Component
)没有任何关系,这是关于自动发现什么是bean而不是bean,而不是什么与布线有关。
答案 1 :(得分:4)
标有@SpringBean注释的类必须具有以下之一:
如果不满足这些条件,将抛出异常,因为Wicket将无法代理该类。
答案 2 :(得分:0)
Spring在运行时使用类加载器和ASM来查找所有带注释的类。
你可以configure spring应该搜索bean:
<context:component-scan base-package="some.package.to.start.from"/>
这将在内部使用ClassPathBeanDefinitionScanner,PathMatchingResourcePatternResolver将使用MetadataReader查找类,使用基于ASM的{{3}}来读取注释。