2009-05-29 53 views
3

我已經在bean上配置了Spring-AOP。Spring AOP - 如何投射代理bean?

當我訪問這個bean時,它返回一個Spring代理類而不是實際的bean。

有沒有什麼辦法可以得到實際的bean?

的applicationContext.xml

<bean id="abc" class="abc.java" /> 

some.java

abc a = (abc)applicationContext.getBean("abc") 

,這將引發:

java.lang.ClassCastException: $Proxy19

+0

你能提供這個bean的spring配置嗎? – dfa 2009-05-29 09:51:35

+0

hakish 2009-05-29 12:04:46

+0

'abc'是具體類還是接口? – Gandalf 2009-05-29 13:57:59

回答

3

你將不得不將它轉換爲代理對象肯定的首發。然後嘗試:

Proxy.getTargetSource().getTarget 

我真的沒有任何想法,如果將工作,描述返回類型的代理類,當AOP文檔是非常模糊的,它說的東西,如「返回

2

根據Spring會生成一個擴展目標bean的類的代理(啓動CGLIB),或者它會生成一個代理來實現目標bean的接口。

如果你的目標bean實現了任何接口,那麼後面的選項會被選中,這通常是可取的,我猜你的目標是cla ss確實實現了至少一個接口。你的獲得bean的代碼是否可以將類型的引用轉換爲接口類型?

但是,您可以使用proxy-target-class選項強制Spring AOP生成擴展目標Bean的類的代理。確切的語法取決於你如何配置AOP,並且你沒有在你的問題中指定這個。