2009-12-22 94 views
9

Wicket的@SpringBean註釋是如何工作的?它在運行時是否使用反射?它是否使編譯器注入一些代碼?或者是什麼?Wicket的@SpringBean註釋如何工作?

+1

Spring API中沒有'@ SpringBean'註釋。 Wicket有一個,但是,你正在使用什麼? – skaffman 2009-12-23 12:08:33

+1

啊,我不知道 - 是的,我正在使用Wicket。我會改變問題和標籤來反映這一點。謝謝。 – Tarquila 2009-12-23 13:08:23

+0

@Tququila - 我認爲在春季解決這個問題更容易。併爲Wicket添加一個新的。 – 2009-12-23 13:38:22

回答

0

Spring在運行時使用類加載器和ASM來查找所有帶註釋的類。

您可以configure其中春季應搜索豆類:

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

這內部使用的ClassPathBeanDefinitionScanner它將使用PathMatchingResourcePatternResolver找到類和ASM-基於MetadataReader閱讀註釋。

+5

雖然這個機制與'@ SpringBean'沒有任何關係,它是一個Wicket構造,而不是Spring構造。 – skaffman 2009-12-23 13:16:52

+0

我從未使用Wicket。我認爲他的意思是@Component等註釋。很高興知道。 – 2009-12-23 13:35:41

25

@SpringBean作品使用Wicket的underlying Injector mechanism。當你實例化一個Wicket組件時,Wicket的組件基類的構造函數反省了實例化的類,尋找@SpringBean註解。如果找到bean,那麼Wicket爲spring bean生成一個代理並將其注入到組件的字段中。這是Wicket的相當於Spring的@Autowired註釋,效果類似。

然而,它與Spring自己的上下文/類路徑掃描功能(例如@Component)沒有任何關係,它是關於自動發現什麼是和不是bean的,而與任何有關的事情有關接線。

+3

要使用這一個,只需要將SpringComponentInjector偵聽器添加到Wicket應用程序來偵聽組件實例。 – Matt 2010-01-09 01:09:17

4

標有註解@SpringBean的類必須具有的一種:

  1. 甲無參數構造
  2. 與無參數構造
  3. 甲超類實現一個接口

如果這些條件不符合,將會拋出異常,因爲Wicket將無法代理該類。

+0

這是有用的信息,但不是真正的問題的答案。作爲對這個問題或其他答案的評論可能會更好。 – 2012-10-26 23:59:05