2009-05-29 74 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,并且你没有在你的问题中指定这个。