2013-10-02 38 views
3

我有一個用@Transactional註解的接口。然後是實現該接口的具體類。由於註釋的原因,Spring會爲每個實現接口的類創建一個代理。Spring代理不包含代理類的註釋

我的問題是,在容器啓動時,我正在檢查是否某些類用特定用戶自定義類型註釋(如果不是我拋出異常)註釋。似乎代理上的getAnnotation()方法返回null。

代理是否應該包含與代理類關聯的所有屬性(例如註釋)?

回答

6

Spring創建代理和默認JDK動態代理,它基本上創建一個動態類作爲一個啓動時間(那些很好的$ Proxy42類),它們就像您的接口的實例一樣。如果您現在調用get類,您將獲得動態創建的類。

使用彈簧的AopProxyUtils實用程序類來獲取包含註釋的實際Class。

所以不是

Class<?> clazz = someObject.getClass(); 

Class<?> clazz = AopProxyUtils.ultimateTargetClass(someObject); 

這應該給你實際的(包裹)類。